📜  在 python 中制作乒乓球游戏(1)

📅  最后修改于: 2023-12-03 15:07:46.536000             🧑  作者: Mango

在 Python 中制作乒乓球游戏

本文将介绍如何使用 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.rectpygame.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 变量来存储得分,在游戏循环中更新得分并在窗口上显示。

到此,我们完成了乒乓球游戏的制作!玩家可以使用左箭头和右箭头键控制挡板,让乒乓球在桌面上弹跳并防止球落地。祝大家玩得愉快!