def move(self, me: Hockeyist, world: World, game: Game, move: Move): factory = self.create_factory(me, world, game, move) strategy = self.create_strategy(factory, me, world, game, move) move.action = strategy.action move.speed_up = strategy.speed_up move.turn = strategy.turn factory.info[type(strategy)] = strategy.info
def move(self, me: Hockeyist, world: World, game: Game, move: Move): # self.me = me # self.world = world # self.game = game # self.me_move = move if me.state == HockeyistState.SWINGING: move.action = ActionType.STRIKE return if world.puck.owner_player_id == me.player_id: if world.puck.owner_hockeyist_id == me.id: opponent = world.get_opponent_player() net_x = 0.5 * (opponent.net_back + opponent.net_front) net_y = 0.5 * (opponent.net_bottom + opponent.net_top) angle_to_net = me.get_angle_to(net_x, net_y) move.turn = angle_to_net if abs(angle_to_net) < self.STRIKE_ANGLE: move.action = ActionType.STRIKE else: nearest_opponent = self.get_nearest_opponent(me, world) if nearest_opponent is not None: if me.get_distance_to_unit(nearest_opponent) > game.stick_length: move.speed_up = 1 else: move.action = ActionType.STRIKE move.turn = me.get_angle_to_unit(nearest_opponent) else: move.speed_up = 1 move.turn = me.get_angle_to_unit(world.puck) move.action = ActionType.TAKE_PUCK
def read_move(self): if not self.read_boolean(): return None move = Move() move.speed_up = self.read_double() move.turn = self.read_double() move.action = self.read_enum(ActionType) if move.action == ActionType.PASS: move.pass_power = self.read_double() move.pass_angle = self.read_double() elif move.action == ActionType.SUBSTITUTE: move.teammate_index = self.read_int() return move
def move(self, me: Hockeyist, world: World, game: Game, move: Move): move.speed_up = -1.0 move.turn = pi move.action = ActionType.STRIKE