The first step is importing the necessary modules. Here we use random for generating random values and pgzrun to run the Pygame Zero game:
import random
import pgzrun
The screen's size is defined here, with a width of 200 pixels and a height of 300 pixels. These smaller dimensions are great for devices with limited display space:
WIDTH = 200
HEIGHT = 300
The paddle is a rectangular object, represented by a Rect object. It starts at the bottom of the screen:
paddle = Rect((WIDTH // 2 - 50, HEIGHT - 20), (100, 10))
We create a small rectangular ball and set its initial speed in both x and y directions:
ball = Rect((WIDTH // 2, HEIGHT // 2), (15, 15))
ball_speed = [3, 3] # Ball's initial speed (x and y directions)
A variable score is used to track the player's score:
score = 0
The draw() function clears the screen and draws the paddle, ball, and the current score:
def draw():
screen.clear()
screen.draw.filled_rect(paddle, "blue")
screen.draw.filled_rect(ball, "red")
screen.draw.text(f"Score: {score}", (10, 10), color="white", fontsize=20)
The update() function is the core of the game logic. It handles paddle movement, ball movement, collision detection, and scoring. Here's a step-by-step explanation:
The paddle moves left or right when the corresponding arrow keys are pressed. It stops at the screen edges:
if keyboard.left and paddle.left > 0:
paddle.x -= 5
if keyboard.right and paddle.right < WIDTH:
paddle.x += 5
keyboard.left: Detects if the left arrow key is pressed.paddle.left > 0: Ensures the paddle doesn’t move beyond the left edge.paddle.right < WIDTH: Ensures the paddle doesn’t move beyond the right edge.The ball’s position is updated each frame based on its current speed:
ball.x += ball_speed[0]
ball.y += ball_speed[1]
ball_speed[0]: The ball’s speed in the x-direction (horizontal).ball_speed[1]: The ball’s speed in the y-direction (vertical).The ball bounces off walls when it hits the left, right, or top edges:
if ball.left <= 0 or ball.right >= WIDTH:
ball_speed[0] = -ball_speed[0]
if ball.top <= 0:
ball_speed[1] = -ball_speed[1]
ball.left <= 0: Detects collision with the left wall.ball.right >= WIDTH: Detects collision with the right wall.ball.top <= 0: Detects collision with the top of the screen.-ball_speed.The ball bounces off the paddle, and the score increases when this happens:
if ball.colliderect(paddle) and ball_speed[1] > 0:
ball_speed[1] = -ball_speed[1]
score += 1
ball.colliderect(paddle): Detects if the ball and paddle are touching.ball_speed[1] > 0: Ensures the ball is moving downward before a collision counts.score += 1: Increases the score by 1 for a successful bounce.If the ball falls below the paddle, the game ends:
if ball.top > HEIGHT:
game_over()
ball.top > HEIGHT: Checks if the ball goes below the bottom of the screen.game_over(): Displays the "GAME OVER" message and schedules the game to quit.If the ball falls below the paddle, the game ends. The game_over() function displays a "GAME OVER" message and exits the game after 3 seconds:
def game_over():
screen.draw.text("GAME OVER", center=(WIDTH // 2, HEIGHT // 2), color="white", fontsize=30)
clock.schedule_unique(quit_game, 3) # Quit after 3 seconds
def quit_game():
exit()
The game starts by calling pgzrun.go(), which enters a loop that repeatedly calls the update() and draw() functions:
pgzrun.go()
Copyright © KX Technology Group, LLC. All Rights Reserved.