📅  最后修改于: 2023-12-03 15:07:46.536000             🧑  作者: Mango
本文将介绍如何使用 Python 编写一款简单的乒乓球游戏。本游戏将显示一个乒乓球桌面,玩家需要控制一条挡板让乒乓球在桌面上弹跳,并防止球落地。
在开始编写乒乓球游戏之前,请确保已经安装了 Python。本游戏使用 Pygame 模块来实现游戏窗口和游戏逻辑,因此需要先安装 Pygame。
安装 Pygame 可以使用以下命令:
pip install pygame
首先,我们需要创建一个游戏窗口。创建窗口需要使用 Pygame 提供的 pygame.display
模块。
import pygame
pygame.init()
# 定义窗口尺寸
WIDTH = 800
HEIGHT = 600
# 创建窗口
window = pygame.display.set_mode((WIDTH, HEIGHT))
# 窗口标题
pygame.display.set_caption('Ping Pong Game')
# 游戏帧率
FPS = 60
在上述代码中,我们创建了一个 pygame.display.set_mode
对象,用于创建游戏窗口。我们还设置了窗口的尺寸和标题,以及游戏的帧率。
接下来,我们需要绘制游戏的乒乓球桌面。我们可以使用 Pygame 提供的 pygame.draw
模块来绘制矩形和线段。
# 定义乒乓球桌面尺寸和颜色
TABLE_WIDTH = WIDTH - 20
TABLE_HEIGHT = HEIGHT - 20
TABLE_COLOR = (255, 255, 255)
# 定义乒乓球和挡板的尺寸和颜色
BALL_RADIUS = 10
BALL_COLOR = (255, 0, 0)
PADDLE_WIDTH = 100
PADDLE_HEIGHT = 10
PADDLE_COLOR = (0, 0, 255)
# 绘制乒乓球桌面
def draw_table():
window.fill(TABLE_COLOR)
pygame.draw.rect(window, (0, 0, 0), pygame.Rect(10, 10, TABLE_WIDTH, TABLE_HEIGHT), 4)
pygame.draw.line(window, (0, 0, 0), (10, HEIGHT // 2), (WIDTH - 10, HEIGHT // 2), 4)
在上述代码中,我们创建了一个 draw_table
函数,用于绘制乒乓球桌面。我们使用 window.fill
方法来填充整个窗口为白色,然后使用 pygame.draw.rect
和 pygame.draw.line
方法绘制矩形和线段来构造乒乓球桌面。
接下来,我们需要控制玩家挡板的移动。我们需要先创建一个挡板对象,并在游戏循环中监听键盘事件来移动挡板。
# 创建挡板对象
paddle = pygame.Rect(WIDTH // 2 - PADDLE_WIDTH // 2, HEIGHT - PADDLE_HEIGHT - 10, PADDLE_WIDTH, PADDLE_HEIGHT)
# 监听键盘事件来移动挡板
def move_paddle(keys_pressed):
if keys_pressed[pygame.K_LEFT] and paddle.left > 10:
paddle.move_ip(-5, 0)
if keys_pressed[pygame.K_RIGHT] and paddle.right < WIDTH - 10:
paddle.move_ip(5, 0)
# 绘制挡板
def draw_paddle():
pygame.draw.rect(window, PADDLE_COLOR, paddle)
在上述代码中,我们创建了一个 paddle
对象来表示挡板的位置和尺寸。然后,我们创建了一个 move_paddle
函数来监听键盘事件,如果玩家按下左箭头或右箭头键,则挡板会向左或向右移动一段距离。最后,在游戏循环中,我们调用 draw_paddle
函数来绘制挡板。
现在,我们需要让乒乓球在桌面上弹跳。我们需要创建一个乒乓球对象,并使用一个速度向量来控制乒乓球的运动方向和速度。然后,在游戏循环中,我们需要检查乒乓球是否碰到了挡板或墙壁,并更新乒乓球的位置和速度向量。
# 创建乒乓球对象和速度向量
ball = pygame.Rect(WIDTH // 2 - BALL_RADIUS, HEIGHT // 2 - BALL_RADIUS, BALL_RADIUS * 2, BALL_RADIUS * 2)
ball_speed = [5, 5]
# 让乒乓球弹跳
def move_ball():
global ball_speed, score
ball.move_ip(ball_speed)
if ball.left < 10 or ball.right > WIDTH - 10:
ball_speed[0] = -ball_speed[0]
if ball.top < 10:
ball_speed[1] = -ball_speed[1]
if ball.bottom > HEIGHT - 10:
ball_speed = [5, 5]
score = 0
if ball.colliderect(paddle):
ball_speed[1] = -ball_speed[1]
# 绘制乒乓球
def draw_ball():
pygame.draw.circle(window, BALL_COLOR, ball.center, BALL_RADIUS)
在上述代码中,我们创建了一个 ball
对象来表示乒乓球的位置和尺寸,以及一个 ball_speed
向量来表示乒乓球的运动方向和速度。然后,我们创建了一个 move_ball
函数来更新乒乓球的位置和速度向量,以及检查乒乓球是否碰到了挡板或墙壁。最后,在游戏循环中,我们调用 draw_ball
函数来绘制乒乓球。
最后,我们需要在游戏窗口上显示得分。我们使用 Pygame 提供的 pygame.font
模块来创建字体对象,并在游戏循环中更新得分并绘制在窗口上。
# 创建字体对象
font = pygame.font.SysFont('monospace', 24)
# 显示得分
def show_score():
score_text = font.render(f'Score: {score}', True, (0, 0, 0))
window.blit(score_text, (10, 10))
# 更新得分
score = 0
# 游戏主循环
clock = pygame.time.Clock()
running = True
while running:
# 监听退出事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 监听键盘事件来移动挡板
keys_pressed = pygame.key.get_pressed()
move_paddle(keys_pressed)
# 让乒乓球弹跳
move_ball()
# 绘制游戏场景
draw_table()
draw_paddle()
draw_ball()
show_score()
pygame.display.flip()
# 控制游戏帧率
clock.tick(FPS)
# 退出 Pygame
pygame.quit()
在上述代码中,我们创建了一个 font
对象来表示字体样式和大小,并创建了一个 show_score
函数来绘制得分。我们还创建了一个 score
变量来存储得分,在游戏循环中更新得分并在窗口上显示。
到此,我们完成了乒乓球游戏的制作!玩家可以使用左箭头和右箭头键控制挡板,让乒乓球在桌面上弹跳并防止球落地。祝大家玩得愉快!