Exemplo n.º 1
0
    def start_game(self):
        playfieldSize = self.playfield.size

        #bricks
        brick_spacing = 4
        top_space = self.playfield.top + (self.playfield.size.y /
                                          16) + brick_spacing / 2
        left_space = self.playfield.left + brick_spacing / 2
        brick_width = (playfieldSize.x / self.bricks_per_row) - brick_spacing
        brick_height = 10

        def kill_brick(brick: Brick, ball: Ball):
            self.brick_collision(brick, ball)

        for i in range(0, self.rows):
            for j in range(0, self.bricks_per_row):
                brick = Brick(
                    Vector2(left_space + (j * (brick_width + brick_spacing)),
                            top_space + (i * (brick_height + brick_spacing))),
                    Vector2(brick_width, brick_height), (255, 255, 255),
                    kill_brick)
                self.add_game_object(brick)
                self.bricks.append(brick)

        self.paddle = Paddle(Vector2(80, 10), self.playfield)
        self.paddle.drawable.pos = Vector2(
            self.playfield.horizontal_center - self.paddle.drawable.size.x / 2,
            self.playfield.bottom - self.paddle.drawable.size.y)
        self.add_game_object(self.paddle)

        self.spawn_ball(self.playfield.size.clone() * 0.5, Vector2(10, 10))
Exemplo n.º 2
0
    def __init__(self, screen_size: Vector2, bricks_per_row: int, rows: int):
        super(Breakton, self).__init__("Breakton", screen_size,
                                       [0b0110, 0b1001])
        self.paddleMaxAngleDeflection = math.radians(60)

        playfieldSize = screen_size * Vector2(0.95, 0.9)
        playfieldPos = Vector2((screen_size.x - playfieldSize.x) / 2,
                               screen_size.y - playfieldSize.y)

        self.playfield = Rect(playfieldPos, playfieldSize)
        self.bricks = []
        self.balls = []
        self.paddle = None
        self.bricks_per_row = bricks_per_row
        self.rows = rows

        #screen corners
        border_color = (40, 40, 40)
        left_edge = Rectangle(self.playfield.pos.x, screen_size.y,
                              border_color)
        top_edge = Rectangle(screen_size.x,
                             screen_size.y - self.playfield.size.y,
                             border_color)
        right_edge = Rectangle(self.playfield.pos.x, screen_size.y,
                               border_color)
        right_edge.pos = Vector2(self.playfield.right, 0)
        self.add_drawable(left_edge)
        self.add_drawable(top_edge)
        self.add_drawable(right_edge)

        self.start_game()
Exemplo n.º 3
0
 def __init__(self, drawable: Drawable, playfield: Rect):
     super(Ball, self).__init__(drawable, 1)
     self.drawable = drawable
     self.velocity = Vector2(200.0, 100.0)
     self.initialPos = drawable.pos.clone()
     self.initialVelocity = self.velocity.clone()
     self.playfield = playfield
Exemplo n.º 4
0
 def spawn_ball_copy(self, original: Ball, angle_delta: float):
     ball = self.spawn_ball(original.drawable.pos.clone(),
                            original.drawable.size.clone())
     velocity = original.velocity.clone()
     angle = velocity.angle
     magnitude = velocity.magnitude
     ball.velocity = Vector2.from_angle_magnitude(angle + angle_delta,
                                                  magnitude)
Exemplo n.º 5
0
 def __init__(self, brick: Brick, color, playfield: Rect,
              on_paddle_collision: Callable[[PowerUpToken, Paddle], None]):
     super(PowerUpToken, self).__init__(
         Rectangle(brick.drawable.size.x, brick.drawable.size.y, color), 3)
     self.drawable.pos = brick.drawable.pos.clone()
     self.velocity = Vector2(0, 50)
     self.playfield = playfield
     self.on_paddle_collision = on_paddle_collision
Exemplo n.º 6
0
    def __init__(self, screen_size: Vector2):
        super(Pong, self).__init__("Pong2", screen_size, [0b10])
        self.backgroundColor = (0, 0, 0)
        self.paddleColor = (255, 255, 255)
        self.ballColor = (255, 255, 255)
        self.clock = pygame.time.Clock()
        self.playfield = Rect(Vector2(0, 0), screen_size)

        paddlesize = Vector2(10, 100)
        paddlewalldistance = 30

        player1drawable = Rectangle(paddlesize.x, paddlesize.y, self.paddleColor)
        player1drawable.pos = Vector2(0 + paddlewalldistance, 0)
        self.player1 = Paddle(player1drawable, pygame.K_w, pygame.K_s, self.playfield, 1)
        self.add_game_object(self.player1)
        self.player1Score = PlayerUI(Vector2(200, 0))
        self.add_drawable(self.player1Score)

        player2drawable = Rectangle(paddlesize.x, paddlesize.y, self.paddleColor)
        player2drawable.pos = Vector2(self.playfield.size.x - paddlesize.x - paddlewalldistance, 0)
        self.player2 = Paddle(player2drawable, pygame.K_UP, pygame.K_DOWN, self.playfield, -1)
        self.add_game_object(self.player2)
        self.player2Score = PlayerUI(Vector2(self.playfield.size.x - 200, 0))
        self.add_drawable(self.player2Score)

        balldrawable = Rectangle(10, 10, self.ballColor)
        #balldrawable = Sprite("drevil-icon.png", 10, 10)
        balldrawable.pos = Vector2(100, 300)
        self.ball = Ball(balldrawable, self.playfield)
        self.add_game_object(self.ball)
Exemplo n.º 7
0
 def power_up_token_collision(self, token: PowerUpToken, paddle: Paddle):
     if isinstance(token, MultiBallPowerUpToken):
         ball = self.balls[0]
         # shoot main ball straight down
         ball.velocity = Vector2.from_angle_magnitude(
             math.pi / 2, ball.velocity.magnitude)
         self.spawn_ball_copy(ball, 2 * math.pi / 3)
         self.spawn_ball_copy(ball, -2 * math.pi / 3)
         self.remove_game_object(token)
Exemplo n.º 8
0
 def __init__(self, pos: Vector2, size: Vector2, playfield: Rect,
              paddleMaxAngleDeflection: float, on_death: Callable[[Ball],
                                                                  None]):
     super(Ball, self).__init__(Rectangle(size.x, size.y, (255, 255, 255)),
                                0)
     self.drawable.pos = pos
     self.velocity = Vector2(300.0, 200.0)
     self.initialPos = self.drawable.pos.clone()
     self.lastPos = self.initialPos
     self.initialVelocity = self.velocity.clone()
     self.playfield = playfield
     self.paddleMaxAngleDeflection = paddleMaxAngleDeflection
     self.on_death = on_death
Exemplo n.º 9
0
    def deflect(self, ball: Ball, direction: int):
        ballrect = ball.drawable.get_rect()
        paddlerect = self.drawable.get_rect()
        ballcenter = ballrect.vertical_center
        paddlecenter = paddlerect.vertical_center

        distance = ballcenter - paddlecenter
        distancenorm = max(min(distance / (paddlecenter - paddlerect.top), 1), -1)  # clamp at (-1, 1) just in case - collision can cause us to be above the paddle's bounds

        magnitude = ball.velocity.magnitude
        straightangle = (direction - 1) * 0.5 * math.pi
        angle = distancenorm * self.paddleMaxAngleDeflection * direction + straightangle
        ball.velocity = Vector2.from_angle_magnitude(angle, magnitude)
Exemplo n.º 10
0
 def spawn_initial_ball(self):
     self.spawn_ball(self.playfield.size.clone() * 0.5, Vector2(10, 10))
Exemplo n.º 11
0
    def spawn_ball_copy(self, original: Ball, angle_delta: float):
        ball = self.spawn_ball(original.drawable.pos.clone(),
                               original.drawable.size.clone())
        velocity = original.velocity.clone()
        angle = velocity.angle
        magnitude = velocity.magnitude
        ball.velocity = Vector2.from_angle_magnitude(angle + angle_delta,
                                                     magnitude)

    def ball_death(self, ball: Ball):
        self.balls.remove(ball)
        self.remove_game_object(ball)
        if len(self.balls) == 0:
            self.spawn_initial_ball()

    def early_update(self, elapsedtime: float, keys: dict):
        pass

    def late_update(self, elapsedtime: float, keys: dict):
        pass

    def draw(self):
        pass


if __name__ == "__main__":

    game = Breakton(Vector2(800, 600), 16, 5)
    game.run()
Exemplo n.º 12
0
        player2drawable = Rectangle(paddlesize.x, paddlesize.y, self.paddleColor)
        player2drawable.pos = Vector2(self.playfield.size.x - paddlesize.x - paddlewalldistance, 0)
        self.player2 = Paddle(player2drawable, pygame.K_UP, pygame.K_DOWN, self.playfield, -1)
        self.add_game_object(self.player2)
        self.player2Score = PlayerUI(Vector2(self.playfield.size.x - 200, 0))
        self.add_drawable(self.player2Score)

        balldrawable = Rectangle(10, 10, self.ballColor)
        #balldrawable = Sprite("drevil-icon.png", 10, 10)
        balldrawable.pos = Vector2(100, 300)
        self.ball = Ball(balldrawable, self.playfield)
        self.add_game_object(self.ball)

    def late_update(self, elapsedtime: float, keys: dict):

        if self.ball.drawable.get_rect().left < self.playfield.left:
            self.player2Score.increment_score()
            self.ball.reset()
        if self.ball.drawable.get_rect().right > self.playfield.right:
            self.player1Score.increment_score()
            self.ball.reset()

    def draw(self):
        pass


if __name__ == "__main__":

    game = Pong(Vector2(800, 600))
    game.run()