def __init__(self, game): super().__init__() self.image = pg.image.load("./images/ball.png") self.rect = self.image.get_rect() self.rect.center = (WIDTH / 2, HEIGHT / 2) self.pos = vec(WIDTH / 2, HEIGHT / 2) self.vel = vec(0, 0) self.acc = vec(0, 0) self.game = game
def get_nearest_point(start_point, points): if isinstance(points, list) and isinstance(start_point, vec): if points: current_nearest_point = points[0] distance_to_current_nearest_point = vec( current_nearest_point - start_point).length for point in points: distance_to_point = vec(point - start_point).length if distance_to_point < distance_to_current_nearest_point: current_nearest_point = point return current_nearest_point else: raise TypeError
def intersection(self, other_line, is_segment=True): if isinstance(is_segment, bool): if isinstance(other_line, Line): eq1 = self.equation eq2 = other_line.equation A1, B1, C1 = eq1[0], eq1[1], eq1[2] A2, B2, C2 = eq2[0], eq2[1], eq2[2] if A1 * B2 - A2 * B1 == 0: # parallel lines return a = np.array([[A1, B1], [A2, B2]]) b = np.array([-C1, -C2]) i = vec(np.linalg.solve(a, b).tolist()) if not is_segment: return i else: if (self.p1.y <= i.y <= self.p2.y) and (self.p1.x <= i.x <= self.p2.x) \ and (other_line.p1.y <= i.y <= other_line.p2.y) and (other_line.p1.x <= i.x <= other_line.p2.x): return i else: # point isn't on two lines return else: raise TypeError else: raise TypeError
def generate_speed(self, direct): if isinstance(direct, str): vel = vec(0, 0) if direct == "up": vel = vec(0, -SAW_SPEED) elif direct == "down": vel = vec(0, SAW_SPEED) elif direct == "left": vel = vec(-SAW_SPEED, 0) elif direct == "right": vel = vec(SAW_SPEED, 0) else: raise ValueError("Invalid direction") return vel else: raise TypeError("Direction must be str")
def __init__(self, x, y, game): super().__init__() self.frames = (pg.image.load("./images/ball0.png"), pg.image.load("./images/ball1.png"), pg.image.load("./images/ball2.png"), pg.image.load("./images/ball3.png"), pg.image.load("./images/ball4.png"), pg.image.load("./images/ball5.png"), pg.image.load("./images/ball6.png"), pg.image.load("./images/ball7.png")) self.current_frame = 0 self.last_update = pg.time.get_ticks() self.image = self.frames[self.current_frame] self.rect = self.image.get_rect() self.rect.center = (x, y) self.vel = vec(0, 0) self.acc = vec(0, 0) self.pos = vec(x, y) self.game = game self.on_ground = False
def update(self): self.acc = vec(0, PLAYER_GRAVITY) self.keydown_processing() self.acc -= self.vel * PLAYER_FRICTION self.vel += self.acc # v = v0 + a*t self.pos += self.vel + self.acc / 2 # x = x0 + v + a/2 self.wall_processing() self.collide_processing() self.rect.center = self.pos self.animate()
def side_right(self): return Line(vec(self.right, self.top), vec(self.right, self.bottom))
def side_left(self): return Line(vec(self.left, self.top), vec(self.left, self.bottom))
def side_bottom(self): return Line(vec(self.left, self.bottom), vec(self.right, self.bottom))
def side_top(self): return Line(vec(self.left, self.top), vec(self.right, self.top))
def center(self): return vec(self.center_x, self.center_y)