コード例 #1
0
    def do_protect_goal_actions(self, env, gstrategy):
        if shortcuts.can_take_puck(env):
            puck_abs_speed = geometry.vector_abs(env.world.puck.speed_x, env.world.puck.speed_y)
            if shortcuts.take_puck_probability(env, puck_abs_speed) >= 1.:
                env.move.action = ActionType.TAKE_PUCK
                return

            if not assessments.puck_is_heading_to_my_net(env):
                env.move.action = ActionType.TAKE_PUCK
                return

        if shortcuts.can_strike_unit(env, env.world.puck):
            env.move.action = ActionType.STRIKE
            return

        for oh in shortcuts.opponent_field_hockeyists(env):
            if shortcuts.can_strike_unit(env, oh):
                env.move.action = ActionType.STRIKE
                return

        if self.its_dangerous(env) and env.me.get_distance_to_unit(self.precount.defence_point) < 100:
            basic_actions.turn_to_unit(env, env.world.puck)
            if geometry.distance(self.precount.defence_point, env.world.puck) <= 200:
                if basic_actions.turned_to_unit(env, env.world.puck):
                    env.move.speed_up = 1.
            return

        speed_abs = geometry.vector_abs(env.me.speed_x, env.me.speed_y)
        if env.me.get_distance_to_unit(self.precount.defence_point) >= 20:
            experiments.fast_move_to_point(env, self.precount.defence_point)
        elif speed_abs > 0.01:
            experiments.do_stop(env)
        else:
            basic_actions.turn_to_unit(env, env.world.puck)
コード例 #2
0
    def move(self, me, world, game, move):
        if me.teammate_index != 0:
            return

        env = environment.Environment(me, world, game, move)

        if world.tick == 0:
            actions = [
                training_actions.TakePuck(),
                training_actions.Stop(),
                # training_actions.TurnToPoint(
                #     geometry.Point(env.game.rink_right, env.game.rink_top + 100)
                # ),
                training_actions.TurnToPoint(
                    shortcuts.my_goalie(env)
                ),
                training_actions.Strike(20),
            ]
            self.action_list = training_actions.ActionList(*actions)

        if self.action_list.do(env):
            return

        puck_speed_abs = geometry.vector_abs(env.world.puck.speed_x, env.world.puck.speed_y)
        print env.world.tick, 'x = ', env.world.puck.speed_x, 'y = ', env.world.puck.speed_y
コード例 #3
0
    def do_get_puck_actions(self, env):
        if self.its_dangerous(env):
            hockeyist_with_puck = shortcuts.hockeyist_with_puck(env)
            if hockeyist_with_puck is not None:
                if shortcuts.can_strike_unit(env, hockeyist_with_puck):
                    env.move.action = ActionType.STRIKE
                    return

        env.move.speed_up = 1.0
        hwp = shortcuts.hockeyist_with_puck(env)
        if hwp is not None:
            basic_actions.turn_to_unit(env, hwp)
        else:
            basic_actions.turn_to_unit(env, env.world.puck)

        if shortcuts.can_take_puck(env):

            puck_abs_speed = geometry.vector_abs(env.world.puck.speed_x, env.world.puck.speed_y)
            if shortcuts.take_puck_probability(env, puck_abs_speed) >= 1.0:
                env.move.action = ActionType.TAKE_PUCK
                return

            if not assessments.puck_is_heading_to_my_net(env):
                env.move.action = ActionType.TAKE_PUCK
                return

        if shortcuts.can_strike_unit(env, env.world.puck):
            env.move.action = ActionType.STRIKE
            return

        if hwp is not None and shortcuts.can_strike_unit(env, hwp):
            env.move.action = ActionType.STRIKE
            return
コード例 #4
0
def fast_move_to_point_backward(env, point):
    distance = env.me.get_distance_to_unit(point)
    mirrow_point = geometry.Point(
        2 * env.me.x - point.x,
        2 * env.me.y - point.y
    )
    angle = env.me.get_angle_to_unit(mirrow_point)

    if abs(angle) > geometry.degree_to_rad(1):
        env.move.turn = angle
        return

    v0 = geometry.vector_abs(env.me.speed_x, env.me.speed_y)
    vn = 0
    a = -env.game.hockeyist_speed_up_factor
    n = prediction.count_n(v0, a, vn)

    if n is None:
        env.move.speed_up = -1.0
        return

    n = round(n) + 1
    x0 = 0.
    xn = prediction.count_xn(x0, v0, a, n)

    if xn > distance:
        env.move.speed_up = 1.0
    else:
        env.move.speed_up = -1.0
コード例 #5
0
    def do(self, env):
        distance = env.me.get_distance_to_unit(self.point)
        angle = env.me.get_angle_to_unit(self.point)

        if distance < 2:
            self.done = True
            speed_abs = geometry.vector_abs(env.me.speed_x, env.me.speed_y)
            print (
                'tick = ', env.world.tick,
                'MoveToPoint done',
                'x = ', env.me.x,
                'y = ', env.me.y,
                'speed abs = ', speed_abs
            )
            return

        if abs(angle) > geometry.degree_to_rad(1):
            env.move.turn = angle
            return

        v0 = geometry.vector_abs(env.me.speed_x, env.me.speed_y)
        vn = 0
        a = -env.game.hockeyist_speed_down_factor
        n = prediction.count_n(v0, a, vn)

        if n is None:
            env.move.speed_up = 1.0
            # print 'tick = ', env.world.tick, 'speed = 1. n is None'
            return

        n = round(n) + 1
        x0 = 0.
        xn = prediction.count_xn(x0, v0, a, n)

        # print (
        #     'v0 = ', v0,
        #     'n =', n,
        #     'xn =', xn,
        #     'dist = ', distance
        # )
        # import ipdb; ipdb.set_trace()
        if xn > distance:
            # print 'tick = ', env.world.tick, 'speed = -1.'
            env.move.speed_up = -1.0
        else:
            # print 'tick = ', env.world.tick, 'speed = 1.'
            env.move.speed_up = 1.0
コード例 #6
0
 def save_start_game_tick(self, env):
     puck = env.world.puck
     if geometry.distance(puck, shortcuts.rink_center(env)) > 0.1:
         return
     puck_abs_speed = geometry.vector_abs(puck.speed_x, puck.speed_y)
     if puck_abs_speed > 0.1:
         return
     self.game_start_tick = env.world.tick
コード例 #7
0
def make_puck(env, x, y, speed_abs, shift):
    goal_point = get_goal_point(env, puck=geometry.Point(x, y), shift=shift)
    speed_x = goal_point.x - x
    speed_y = goal_point.y - y
    norm = geometry.vector_abs(speed_x, speed_y)
    speed_x = speed_x * speed_abs / norm
    speed_y = speed_y * speed_abs / norm
    return prediction.UnitShadow(x, y, speed_x, speed_y, 0)
コード例 #8
0
def make_puck(env, x, y, speed_x=None, speed_y=None):
    goal_point = get_goal_point(env, puck=geometry.Point(x, y))
    if speed_x is None:
        speed_x = goal_point.x - x
        speed_y = goal_point.y - y
        norm = geometry.vector_abs(speed_x, speed_y)
        speed_x = speed_x * 15.0 / norm
        speed_y = speed_y * 15.0 / norm
    return prediction.UnitShadow(x, y, speed_x, speed_y, 0)
コード例 #9
0
def do_stop(env):
    speed_abs = geometry.vector_abs(env.me.speed_x, env.me.speed_y)
    angle = geometry.get_angle(
        math.cos(env.me.angle), math.sin(env.me.angle),
        env.me.speed_x, env.me.speed_y)
    if abs(geometry.rad_to_degree(angle)) < 90:
        env.move.turn = angle
        env.move.speed_up = -min(1., speed_abs / env.game.hockeyist_speed_down_factor)
    else:
        env.move.turn = -angle
        env.move.speed_up = min(1., speed_abs / env.game.hockeyist_speed_up_factor)
コード例 #10
0
def puck_is_heading_to_unit(env, unit):
    if shortcuts.hockeyist_with_puck(env) is not None:
        return False
    speed_abs = geometry.vector_abs(env.world.puck.speed_x, env.world.puck.speed_y)
    if speed_abs < 10:
        return False
    return geometry.ray_point_distance(
        env.world.puck,
        geometry.Point(
            env.world.puck.speed_x,
            env.world.puck.speed_y
        ),
        unit) < 60
コード例 #11
0
    def do(self, env):
        speed_abs = geometry.vector_abs(env.me.speed_x, env.me.speed_y)
        if speed_abs < 0.0001:
            self.done = True
            print (
                'tick = ', env.world.tick,
                'Stop done',
                'x = ', env.me.x,
                'y = ', env.me.y,
                'speed abs = ', speed_abs
            )
            return

        angle = geometry.get_angle(
            math.cos(env.me.angle), math.sin(env.me.angle),
            env.me.speed_x, env.me.speed_y)
        if abs(geometry.rad_to_degree(angle)) < 90:
            env.move.turn = angle
            env.move.speed_up = -min(1., speed_abs / env.game.hockeyist_speed_down_factor)
        else:
            env.move.turn = -angle
            env.move.speed_up = min(1., speed_abs / env.game.hockeyist_speed_up_factor)