def test_get_distance(): unit = Unit(x=0, y=0) point = [3, 4] assert unit.get_distance_to(*point) == 5
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
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