def new_point(self, x, y) -> Point: angels = self.get_angels(self.enemy) radius = 100 if not self.validate_near_drone(radius, x, y): x += random.choice([-radius, radius]) y += random.choice([-radius * 2, radius * 2]) if self.validate_point(x, y): point = Point( round( int(x + Vector.to_radian(angels[self.drones.index(self)]))), round( int(y + Vector.to_radian(angels[self.drones.index(self)]))), ) else: point = self.pursue() return point
def determine_point_to_shoot_from_vector(self, e_coord, e_vector, speed_drone=1, speed_shoot=2): time_to_e = self.drone.get_distance_from_points( self.drone.point, e_coord) / speed_shoot e_dist_while_shooting = time_to_e * speed_drone e_angle = Vector.to_radian(e_vector.direction) meeting_point_x = e_dist_while_shooting * math.cos(e_angle) meeting_point_y = e_dist_while_shooting * math.sin(e_angle) meeting_point = Point(e_coord.x + meeting_point_x, e_coord.y + meeting_point_y) return meeting_point
def get_near_point(self, point, distance=80, delta_angle=60, x_distance=0.0, start_point=None): if start_point is None: start_point = self.coord vector_between_points = Vector.from_points(start_point, point) angle_to_point = vector_between_points.direction if x_distance != 0: distance = vector_between_points.module * x_distance delta_angle = 0 new_angle_grad = angle_to_point + delta_angle new_angle = Vector.to_radian(int(new_angle_grad)) new_x = start_point.x + distance * math.cos(new_angle) new_y = start_point.y + distance * math.sin(new_angle) new_point = Point(new_x, new_y) return new_point