Python如何实现小游戏​pong

发布时间:2021-12-17 17:36:58 作者:iii
来源:亿速云 阅读:219

Python如何实现小游戏Pong

引言

Pong是一款经典的电子游戏,最早由Atari公司在1972年发布。它是电子游戏历史上的里程碑之一,也是最早的体育类电子游戏之一。Pong的玩法非常简单:两个玩家分别控制一个挡板,通过移动挡板来反弹球,目标是让球越过对方的挡板得分。

在这篇文章中,我们将使用Python编程语言来实现一个简化版的Pong游戏。我们将使用pygame库来处理图形和用户输入。通过这个项目,你将学习到如何使用Python进行游戏开发,并掌握一些基本的游戏编程概念。

准备工作

在开始编写代码之前,我们需要确保已经安装了pygame库。如果你还没有安装,可以使用以下命令进行安装:

pip install pygame

安装完成后,我们就可以开始编写代码了。

创建游戏窗口

首先,我们需要创建一个游戏窗口。这个窗口将显示游戏的图形界面。我们可以使用pygame库中的pygame.display.set_mode()函数来创建一个窗口。

import pygame

# 初始化pygame
pygame.init()

# 设置窗口大小
WIDTH, HEIGHT = 800, 600
win = pygame.display.set_mode((WIDTH, HEIGHT))

# 设置窗口标题
pygame.display.set_caption("Pong")

# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 填充背景颜色
    win.fill((0, 0, 0))

    # 更新显示
    pygame.display.update()

# 退出pygame
pygame.quit()

在这段代码中,我们首先初始化了pygame,然后创建了一个800x600像素的窗口。接着,我们进入游戏的主循环,不断检查是否有退出事件(如用户点击关闭按钮)。如果没有退出事件,我们就填充窗口背景为黑色,并更新显示。

添加挡板和球

接下来,我们需要在游戏中添加两个挡板和一个球。挡板是玩家控制的矩形,球是一个圆形,会在窗口中反弹。

import pygame

# 初始化pygame
pygame.init()

# 设置窗口大小
WIDTH, HEIGHT = 800, 600
win = pygame.display.set_mode((WIDTH, HEIGHT))

# 设置窗口标题
pygame.display.set_caption("Pong")

# 定义颜色
WHITE = (255, 255, 255)

# 定义挡板和球的属性
PADDLE_WIDTH, PADDLE_HEIGHT = 10, 100
BALL_RADIUS = 10

# 创建挡板
left_paddle = pygame.Rect(10, HEIGHT // 2 - PADDLE_HEIGHT // 2, PADDLE_WIDTH, PADDLE_HEIGHT)
right_paddle = pygame.Rect(WIDTH - 20, HEIGHT // 2 - PADDLE_HEIGHT // 2, PADDLE_WIDTH, PADDLE_HEIGHT)

# 创建球
ball = pygame.Rect(WIDTH // 2 - BALL_RADIUS, HEIGHT // 2 - BALL_RADIUS, BALL_RADIUS * 2, BALL_RADIUS * 2)

# 设置球的初始速度
ball_velocity = [5, 5]

# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 填充背景颜色
    win.fill((0, 0, 0))

    # 绘制挡板和球
    pygame.draw.rect(win, WHITE, left_paddle)
    pygame.draw.rect(win, WHITE, right_paddle)
    pygame.draw.ellipse(win, WHITE, ball)

    # 更新球的位置
    ball.x += ball_velocity[0]
    ball.y += ball_velocity[1]

    # 球与上下边界的碰撞检测
    if ball.top <= 0 or ball.bottom >= HEIGHT:
        ball_velocity[1] = -ball_velocity[1]

    # 球与挡板的碰撞检测
    if ball.colliderect(left_paddle) or ball.colliderect(right_paddle):
        ball_velocity[0] = -ball_velocity[0]

    # 更新显示
    pygame.display.update()

# 退出pygame
pygame.quit()

在这段代码中,我们定义了挡板和球的属性,并使用pygame.Rect来创建它们。我们还设置了球的初始速度,并在游戏主循环中更新球的位置。当球碰到窗口的上下边界时,我们反转球的垂直速度;当球碰到挡板时,我们反转球的水平速度。

添加玩家控制

现在,我们需要让玩家能够控制挡板的移动。我们可以使用键盘的上下箭头来控制右边的挡板,使用WS键来控制左边的挡板。

import pygame

# 初始化pygame
pygame.init()

# 设置窗口大小
WIDTH, HEIGHT = 800, 600
win = pygame.display.set_mode((WIDTH, HEIGHT))

# 设置窗口标题
pygame.display.set_caption("Pong")

# 定义颜色
WHITE = (255, 255, 255)

# 定义挡板和球的属性
PADDLE_WIDTH, PADDLE_HEIGHT = 10, 100
BALL_RADIUS = 10

# 创建挡板
left_paddle = pygame.Rect(10, HEIGHT // 2 - PADDLE_HEIGHT // 2, PADDLE_WIDTH, PADDLE_HEIGHT)
right_paddle = pygame.Rect(WIDTH - 20, HEIGHT // 2 - PADDLE_HEIGHT // 2, PADDLE_WIDTH, PADDLE_HEIGHT)

# 创建球
ball = pygame.Rect(WIDTH // 2 - BALL_RADIUS, HEIGHT // 2 - BALL_RADIUS, BALL_RADIUS * 2, BALL_RADIUS * 2)

# 设置球的初始速度
ball_velocity = [5, 5]

# 设置挡板的速度
PADDLE_SPEED = 7

# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 获取键盘输入
    keys = pygame.key.get_pressed()
    if keys[pygame.K_w] and left_paddle.top > 0:
        left_paddle.y -= PADDLE_SPEED
    if keys[pygame.K_s] and left_paddle.bottom < HEIGHT:
        left_paddle.y += PADDLE_SPEED
    if keys[pygame.K_UP] and right_paddle.top > 0:
        right_paddle.y -= PADDLE_SPEED
    if keys[pygame.K_DOWN] and right_paddle.bottom < HEIGHT:
        right_paddle.y += PADDLE_SPEED

    # 填充背景颜色
    win.fill((0, 0, 0))

    # 绘制挡板和球
    pygame.draw.rect(win, WHITE, left_paddle)
    pygame.draw.rect(win, WHITE, right_paddle)
    pygame.draw.ellipse(win, WHITE, ball)

    # 更新球的位置
    ball.x += ball_velocity[0]
    ball.y += ball_velocity[1]

    # 球与上下边界的碰撞检测
    if ball.top <= 0 or ball.bottom >= HEIGHT:
        ball_velocity[1] = -ball_velocity[1]

    # 球与挡板的碰撞检测
    if ball.colliderect(left_paddle) or ball.colliderect(right_paddle):
        ball_velocity[0] = -ball_velocity[0]

    # 更新显示
    pygame.display.update()

# 退出pygame
pygame.quit()

在这段代码中,我们使用pygame.key.get_pressed()来获取键盘输入,并根据按键的状态来移动挡板。我们还添加了边界检测,确保挡板不会移出窗口。

添加得分系统

最后,我们需要为游戏添加一个得分系统。当球越过一个挡板时,对方玩家得分。我们将在窗口的顶部显示双方的得分。

import pygame

# 初始化pygame
pygame.init()

# 设置窗口大小
WIDTH, HEIGHT = 800, 600
win = pygame.display.set_mode((WIDTH, HEIGHT))

# 设置窗口标题
pygame.display.set_caption("Pong")

# 定义颜色
WHITE = (255, 255, 255)

# 定义挡板和球的属性
PADDLE_WIDTH, PADDLE_HEIGHT = 10, 100
BALL_RADIUS = 10

# 创建挡板
left_paddle = pygame.Rect(10, HEIGHT // 2 - PADDLE_HEIGHT // 2, PADDLE_WIDTH, PADDLE_HEIGHT)
right_paddle = pygame.Rect(WIDTH - 20, HEIGHT // 2 - PADDLE_HEIGHT // 2, PADDLE_WIDTH, PADDLE_HEIGHT)

# 创建球
ball = pygame.Rect(WIDTH // 2 - BALL_RADIUS, HEIGHT // 2 - BALL_RADIUS, BALL_RADIUS * 2, BALL_RADIUS * 2)

# 设置球的初始速度
ball_velocity = [5, 5]

# 设置挡板的速度
PADDLE_SPEED = 7

# 初始化得分
left_score = 0
right_score = 0

# 设置字体
font = pygame.font.Font(None, 74)

# 游戏主循环
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 获取键盘输入
    keys = pygame.key.get_pressed()
    if keys[pygame.K_w] and left_paddle.top > 0:
        left_paddle.y -= PADDLE_SPEED
    if keys[pygame.K_s] and left_paddle.bottom < HEIGHT:
        left_paddle.y += PADDLE_SPEED
    if keys[pygame.K_UP] and right_paddle.top > 0:
        right_paddle.y -= PADDLE_SPEED
    if keys[pygame.K_DOWN] and right_paddle.bottom < HEIGHT:
        right_paddle.y += PADDLE_SPEED

    # 填充背景颜色
    win.fill((0, 0, 0))

    # 绘制挡板和球
    pygame.draw.rect(win, WHITE, left_paddle)
    pygame.draw.rect(win, WHITE, right_paddle)
    pygame.draw.ellipse(win, WHITE, ball)

    # 更新球的位置
    ball.x += ball_velocity[0]
    ball.y += ball_velocity[1]

    # 球与上下边界的碰撞检测
    if ball.top <= 0 or ball.bottom >= HEIGHT:
        ball_velocity[1] = -ball_velocity[1]

    # 球与挡板的碰撞检测
    if ball.colliderect(left_paddle) or ball.colliderect(right_paddle):
        ball_velocity[0] = -ball_velocity[0]

    # 球越过左右边界
    if ball.left <= 0:
        right_score += 1
        ball_velocity = [5, 5]
        ball.center = (WIDTH // 2, HEIGHT // 2)
    if ball.right >= WIDTH:
        left_score += 1
        ball_velocity = [5, 5]
        ball.center = (WIDTH // 2, HEIGHT // 2)

    # 绘制得分
    left_text = font.render(str(left_score), True, WHITE)
    right_text = font.render(str(right_score), True, WHITE)
    win.blit(left_text, (WIDTH // 4, 10))
    win.blit(right_text, (3 * WIDTH // 4, 10))

    # 更新显示
    pygame.display.update()

# 退出pygame
pygame.quit()

在这段代码中,我们添加了两个变量left_scoreright_score来记录双方的得分。当球越过左边界或右边界时,我们增加相应的得分,并重置球的位置和速度。我们还使用pygame.font.Font来创建字体对象,并在窗口的顶部显示双方的得分。

结论

通过这个项目,我们使用Python和pygame库实现了一个简化版的Pong游戏。我们学习了如何创建游戏窗口、绘制图形、处理用户输入、检测碰撞以及实现得分系统。虽然这个游戏非常简单,但它涵盖了游戏开发中的许多基本概念。你可以在此基础上继续扩展,添加更多的功能,如音效、更复杂的对手等。

希望这篇文章对你有所帮助,祝你在游戏开发的道路上越走越远!

推荐阅读:
  1. python如何实现吃苹果小游戏
  2. Python如何实现井字棋小游戏

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:Python怎么实现小游戏​flappy-bird

下一篇:如何进行springboot配置templates直接访问的实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》