Example #1
0
class Runner:
    def __init__(self):
        if sys.argv.__len__() == 4:
            self.remote_process_client = RemoteProcessClient(sys.argv[1], int(sys.argv[2]))
            self.token = sys.argv[3]
        else:
            self.remote_process_client = RemoteProcessClient("127.0.0.1", 31001)
            self.token = "0000000000000000"

    def run(self):
        try:
            self.remote_process_client.write_token_message(self.token)
            self.remote_process_client.write_protocol_version_message()
            self.remote_process_client.read_team_size_message()
            game = self.remote_process_client.read_game_context_message()

            strategy = MyStrategy()

            while True:
                player_context = self.remote_process_client.read_player_context_message()
                if player_context is None:
                    break

                player = player_context.player
                if player is None:
                    break

                move = Move()
                strategy.move(player, player_context.world, game, move)

                self.remote_process_client.write_move_message(move)
        finally:
            self.remote_process_client.close()
Example #2
0
class Runner:
    def __init__(self):
        if sys.argv.__len__() == 4:
            self.remote_process_client = RemoteProcessClient(sys.argv[1], int(sys.argv[2]))
            self.token = sys.argv[3]
        else:
            for _ in xrange(20):
                try:
                    self.remote_process_client = RemoteProcessClient("127.0.0.1", 31001)
                except socket.error as ex:
                    if ex.errno == ERRNO_REFUSED:
                        time.sleep(0.1)
                        continue
                    raise
                else:
                    break
            self.token = "0000000000000000"

    def run(self):
        try:
            self.remote_process_client.write_token_message(self.token)
            team_size = self.remote_process_client.read_team_size_message()
            self.remote_process_client.write_protocol_version_message()
            game = self.remote_process_client.read_game_context_message()

            strategies = []

            for _ in xrange(team_size):
                strategies.append(MyStrategy())

            while True:
                player_context = self.remote_process_client.read_player_context_message()
                if player_context is None:
                    break

                player_cars = player_context.cars
                if player_cars is None or player_cars.__len__() != team_size:
                    break

                moves = []

                for car_index in xrange(team_size):
                    player_car = player_cars[car_index]

                    move = Move()
                    moves.append(move)
                    strategies[player_car.teammate_index].move(player_car, player_context.world, game, move)

                self.remote_process_client.write_moves_message(moves)
        except socket.error as ex:
            if ex.errno != ERRNO_RESET:
                raise
        except KeyboardInterrupt:
            pass
        finally:
            self.remote_process_client.close()
Example #3
0
class Runner:
    def __init__(self):
        if sys.argv.__len__() == 4:
            self.remote_process_client = RemoteProcessClient(
                sys.argv[1], int(sys.argv[2]))
            self.token = sys.argv[3]
        elif sys.argv.__len__() == 2:
            self.remote_process_client = RemoteProcessClient(
                '127.0.0.1', int(sys.argv[1]))
            self.token = "0000000000000000"
        else:
            self.remote_process_client = RemoteProcessClient(
                "127.0.0.1", 31001)
            self.token = "0000000000000000"

    def run(self):
        try:
            self.remote_process_client.write_token_message(self.token)
            team_size = self.remote_process_client.read_team_size_message()
            self.remote_process_client.write_protocol_version_message()
            game = self.remote_process_client.read_game_context_message()

            strategies = []

            for strategy_index in range(team_size):
                strategies.append(MyStrategy())

            while True:
                player_context = self.remote_process_client.read_player_context_message(
                )
                if player_context is None:
                    break

                player_hockeyists = player_context.hockeyists
                if player_hockeyists is None or player_hockeyists.__len__(
                ) != team_size:
                    break

                moves = []

                for hockeyist_index in range(team_size):
                    player_hockeyist = player_hockeyists[hockeyist_index]

                    move = Move()
                    moves.append(move)
                    strategies[player_hockeyist.teammate_index].move(
                        player_hockeyist, player_context.world, game, move)

                self.remote_process_client.write_moves_message(moves)
        finally:
            self.remote_process_client.close()
Example #4
0
class Runner:
    def __init__(self):
        if sys.argv.__len__() == 4:
            self.remote_process_client = RemoteProcessClient(sys.argv[1], int(sys.argv[2]))
            self.token = sys.argv[3]
        elif sys.argv.__len__() == 2:
            self.remote_process_client = RemoteProcessClient('127.0.0.1', int(sys.argv[1]))
            self.token = "0000000000000000"
        else:
            self.remote_process_client = RemoteProcessClient("127.0.0.1", 31001)
            self.token = "0000000000000000"

    def run(self):
        try:
            self.remote_process_client.write_token_message(self.token)
            team_size = self.remote_process_client.read_team_size_message()
            self.remote_process_client.write_protocol_version_message()
            game = self.remote_process_client.read_game_context_message()

            strategies = []

            for strategy_index in range(team_size):
                strategies.append(MyStrategy())

            while True:
                player_context = self.remote_process_client.read_player_context_message()
                if player_context is None:
                    break

                player_hockeyists = player_context.hockeyists
                if player_hockeyists is None or player_hockeyists.__len__() != team_size:
                    break

                moves = []

                for hockeyist_index in range(team_size):
                    player_hockeyist = player_hockeyists[hockeyist_index]

                    move = Move()
                    moves.append(move)
                    strategies[player_hockeyist.teammate_index].move(player_hockeyist, player_context.world, game, move)

                self.remote_process_client.write_moves_message(moves)
        finally:
            self.remote_process_client.close()
Example #5
0
class Runner:
    def __init__(self):
        if sys.argv.__len__() == 4:
            self.remote_process_client = RemoteProcessClient(sys.argv[1], int(sys.argv[2]))
            self.token = sys.argv[3]
        else:
            self.remote_process_client = RemoteProcessClient("127.0.0.1", 31001)
            self.token = "0000000000000000"

    def run(self, pid=None):
        try:
            self.remote_process_client.write_token_message(self.token)
            self.remote_process_client.write_protocol_version_message()
            team_size = self.remote_process_client.read_team_size_message()
            game = self.remote_process_client.read_game_context_message()

            strategies = []

            for _ in range(team_size):
                strategies.append(MyStrategy())

            while True:
                player_context = self.remote_process_client.read_player_context_message()
                if player_context is None:
                    break

                player_wizards = player_context.wizards
                if player_wizards is None or player_wizards.__len__() != team_size:
                    break

                moves = []

                for wizard_index in range(team_size):
                    player_wizard = player_wizards[wizard_index]

                    move = Move()
                    moves.append(move)
                    strategies[wizard_index].move(player_wizard, player_context.world, game, move)

                self.remote_process_client.write_moves_message(moves)
        finally:
            self.remote_process_client.close()
            if pid:
                os.kill(pid, signal.SIGTERM)
Example #6
0
class Runner:
    def __init__(self):
        self.reload = True
        self.freeze = False
        self.debug_client = DebugClient()
        self.input_event = EventEmitter()
        self.strategies = []
        if sys.argv.__len__() == 4:
            self.remote_process_client = RemoteProcessClient(
                sys.argv[1], int(sys.argv[2]))
            self.token = sys.argv[3]
        else:
            self.remote_process_client = RemoteProcessClient(
                "127.0.0.1", 31001)
            self.token = "0000000000000000"

    def run(self):
        try:
            self.remote_process_client.write_token_message(self.token)
            self.remote_process_client.write_protocol_version_message()
            team_size = self.remote_process_client.read_team_size_message()
            game = self.remote_process_client.read_game_context_message()

            self.strategies = []
            self.start_input()
            world_time = 0

            while True:
                while self.freeze:
                    time.sleep(0.5)

                if self.reload:
                    print(f'actually reloading at {world_time}')
                    for module in [
                            x for x in sys.modules if x.startswith('aicup2016')
                    ]:
                        del sys.modules[module]
                    from aicup2016.strategy import Strategy

                    self.strategies = []
                    for _ in range(team_size):
                        self.strategies.append(
                            Strategy(debug_client=self.debug_client,
                                     input_event=self.input_event))
                    self.reload = False

                player_context = self.remote_process_client.read_player_context_message(
                )
                if player_context is None:
                    break
                world_time = player_context.world.tick_index

                player_wizards = player_context.wizards
                if player_wizards is None or player_wizards.__len__(
                ) != team_size:
                    break

                moves = []

                for wizard_index in range(team_size):
                    player_wizard = player_wizards[wizard_index]

                    move = Move()
                    moves.append(move)
                    self.strategies[wizard_index].move(player_wizard,
                                                       player_context.world,
                                                       game, move)

                self.remote_process_client.write_moves_message(moves)
        finally:
            self.remote_process_client.close()

    def start_input(self):
        Thread(target=self.worker, daemon=False).start()

    def worker(self):
        while True:
            self.handle_input(input())

    def handle_input(self, input):
        if input == 'r':
            self.reload = True
            print('reloading')
        elif input == 'p':
            self.freeze = not self.freeze
            print('pause')
        else:
            self.input_event.emit(input)