예제 #1
0
 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
예제 #2
0
 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
예제 #3
0
 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
예제 #4
0
 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")
예제 #5
0
 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
예제 #6
0
    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()
예제 #7
0
 def side_right(self):
     return Line(vec(self.right, self.top), vec(self.right, self.bottom))
예제 #8
0
 def side_left(self):
     return Line(vec(self.left, self.top), vec(self.left, self.bottom))
예제 #9
0
 def side_bottom(self):
     return Line(vec(self.left, self.bottom), vec(self.right, self.bottom))
예제 #10
0
 def side_top(self):
     return Line(vec(self.left, self.top), vec(self.right, self.top))
예제 #11
0
 def center(self):
     return vec(self.center_x, self.center_y)