Example #1
0
def test_get_distance():
    unit = Unit(x=0, y=0)

    point = [3, 4]
    assert unit.get_distance_to(*point) == 5
Example #2
0
    def calcAcceleration(self, skateX, skateY):

        Tmin = 10000
        a_min = 1.0

        if self.me.get_distance_to(skateX,
                                   skateY) > self.game.world_width / 5.0:
            self.move_turn = self.me.get_angle_to(skateX, skateY)
            self.move_speed_up = 1.0
            return True

        if abs(self.me.get_angle_to(skateX, skateY)) <= pi / 2.0:
            direction = 'forward'
        else:
            direction = 'back'

        for i in range(10):
            (x, y) = (self.me.x, self.me.y)
            v = self.speed
            alpha = self.angle
            a0 = 1.0 - i / 10.0
            T = Tmin

            if direction == 'forward' and a0 < 0.0:
                break
            # if direction == 'back' and self.me.get_distance_to(skateX, skateY) > 100.0 and a < 0.0:
            #     break

            for j in range(100):
                aj = a0 - j * 0.001
                unit = Unit(999 + i * 100 + j, 0.0, 0.0, x, y, 0.0, 0.0, alpha,
                            0.0)
                if (x < self.game.rink_left or x > self.game.rink_right
                        or y < self.game.rink_top
                        or y > self.game.rink_bottom):
                    break

                if unit.get_distance_to(skateX, skateY) < 1.0:
                    T = j
                    break

                if aj > 0.0:
                    v += aj * self.game.hockeyist_speed_up_factor
                else:
                    v += aj * self.game.hockeyist_speed_down_factor

                v = 0.95 * v  # friction

                dalpha = unit.get_angle_to(skateX, skateY)
                if v < 0.0 and dalpha < 0.0:
                    dalpha = dalpha + pi
                elif v < 0.0 and dalpha > 0.0:
                    dalpha = dalpha - pi

                dalpha = copysign(
                    min(abs(dalpha), self.game.hockeyist_turn_angle_factor),
                    dalpha)

                alpha = normAngle(alpha + dalpha)
                (x, y) = (x + v * cos(alpha), y + v * sin(alpha))

            if T < Tmin:
                Tmin = T
                a_min = a0

        alpha = self.me.get_angle_to(skateX, skateY)
        if T == 10000:
            #print self.me.x, self.me.y, skateX, skateY, self.angle, direction, self.speed
            self.move_turn = alpha
            self.move_speed_up = 1.0
        elif direction == 'back' and a_min < 0.0 and alpha < 0.0:
            self.move_turn = alpha + pi
            self.move_speed_up = a_min
        elif direction == 'back' and a_min < 0.0 and alpha > 0.0:
            self.move_turn = alpha - pi
            self.move_speed_up = a_min
        else:
            self.move_turn = alpha
            self.move_speed_up = a_min

        return True
Example #3
0
    def calcAcceleration(self, skateX, skateY):

        Tmin = 10000
        a_min = 1.0

        if self.me.get_distance_to(skateX, skateY) > self.game.world_width / 5.0:
            self.move_turn = self.me.get_angle_to(skateX, skateY)
            self.move_speed_up = 1.0
            return True

        if abs(self.me.get_angle_to(skateX, skateY)) <= pi / 2.0:
            direction = "forward"
        else:
            direction = "back"

        for i in range(10):
            (x, y) = (self.me.x, self.me.y)
            v = self.speed
            alpha = self.angle
            a0 = 1.0 - i / 10.0
            T = Tmin

            if direction == "forward" and a0 < 0.0:
                break
            # if direction == 'back' and self.me.get_distance_to(skateX, skateY) > 100.0 and a < 0.0:
            #     break

            for j in range(100):
                aj = a0 - j * 0.001
                unit = Unit(999 + i * 100 + j, 0.0, 0.0, x, y, 0.0, 0.0, alpha, 0.0)
                if (
                    x < self.game.rink_left
                    or x > self.game.rink_right
                    or y < self.game.rink_top
                    or y > self.game.rink_bottom
                ):
                    break

                if unit.get_distance_to(skateX, skateY) < 1.0:
                    T = j
                    break

                if aj > 0.0:
                    v += aj * self.game.hockeyist_speed_up_factor
                else:
                    v += aj * self.game.hockeyist_speed_down_factor

                v = 0.95 * v  # friction

                dalpha = unit.get_angle_to(skateX, skateY)
                if v < 0.0 and dalpha < 0.0:
                    dalpha = dalpha + pi
                elif v < 0.0 and dalpha > 0.0:
                    dalpha = dalpha - pi

                dalpha = copysign(min(abs(dalpha), self.game.hockeyist_turn_angle_factor), dalpha)

                alpha = normAngle(alpha + dalpha)
                (x, y) = (x + v * cos(alpha), y + v * sin(alpha))

            if T < Tmin:
                Tmin = T
                a_min = a0

        alpha = self.me.get_angle_to(skateX, skateY)
        if T == 10000:
            # print self.me.x, self.me.y, skateX, skateY, self.angle, direction, self.speed
            self.move_turn = alpha
            self.move_speed_up = 1.0
        elif direction == "back" and a_min < 0.0 and alpha < 0.0:
            self.move_turn = alpha + pi
            self.move_speed_up = a_min
        elif direction == "back" and a_min < 0.0 and alpha > 0.0:
            self.move_turn = alpha - pi
            self.move_speed_up = a_min
        else:
            self.move_turn = alpha
            self.move_speed_up = a_min

        return True