Pygame 入门指南:从环境搭建到制作简易打砖块游戏

一、环境搭建:5 分钟配置开发环境

Pygame 的安装过程非常简单,只需确保你的电脑已安装 Python 3.6+ 版本(推荐 3.8 及以上),然后通过 pip 命令完成安装。

1. 检查 Python 环境

首先打开终端(Windows 系统为 cmd 或 PowerShell,macOS/Linux 为终端),输入以下命令验证 Python 版本:

 

python --version # 或 python3 --version(部分系统)

若输出类似 Python 3.10.12 的结果,则说明 Python 环境正常。

2. 安装 Pygame

在终端中执行以下命令安装 Pygame 官方稳定版:

 

pip install pygame # 或 pip3 install pygame

安装完成后,可通过以下代码验证是否安装成功:

 

import pygame

print(pygame.__version__) # 输出 Pygame 版本号,如 2.5.2 即表示成功

二、Pygame 核心概念:理解游戏开发的 “骨架”

在开始写游戏前,我们需要先掌握 Pygame 的几个核心概念,它们是所有 Pygame 项目的基础框架。

1. 初始化与窗口创建

任何 Pygame 程序都需要先初始化库,并创建一个游戏窗口(即 “屏幕”)。示例代码如下:

 

import pygame

import sys

# 1. 初始化 Pygame

pygame.init()

# 2. 设置窗口大小和标题

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 600

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

pygame.display.set_caption("我的第一个 Pygame 程序")

# 3. 游戏主循环(核心)

running = True

while running:

# 处理事件(如点击关闭、键盘输入等)

for event in pygame.event.get():

# 点击窗口关闭按钮时退出

if event.type == pygame.QUIT:

running = False

# 填充屏幕背景色(RGB 颜色,此处为浅灰色)

screen.fill((230, 230, 230))

# 更新屏幕显示(必须调用,否则绘制内容不生效)

pygame.display.flip()

# 退出 Pygame

pygame.quit()

sys.exit()

关键说明

  • pygame.init():初始化 Pygame 的所有模块(如音频、图形等),必须放在程序开头。
  • 游戏主循环:是游戏的 “心脏”,负责持续处理事件、更新游戏状态、绘制画面,直到游戏结束。
  • pygame.display.flip():刷新屏幕,将绘制的内容显示出来(也可用 pygame.display.update() 更灵活地刷新指定区域)。

2. 绘制基本图形

Pygame 提供了丰富的绘图函数,可快速绘制矩形、圆形、线段等基本图形,这是制作游戏元素的基础。

函数

功能

示例

pygame.draw.rect()

绘制矩形

pygame.draw.rect(screen, (255,0,0), (100,100,50,30))

pygame.draw.circle()

绘制圆形

pygame.draw.circle(screen, (0,255,0), (400,300), 20)

pygame.draw.line()

绘制线段

pygame.draw.line(screen, (0,0,255), (0,0), (800,600), 2)

参数说明

  • 第一个参数:绘制的目标屏幕(即 screen 对象);
  • 第二个参数:颜色(RGB 元组,范围 0-255);
  • 后续参数:图形的位置和尺寸(如矩形为 (x, y, 宽度, 高度),圆形为 (圆心x, 圆心y, 半径))。

3. 事件处理与键盘控制

游戏的交互性依赖于事件处理,Pygame 会将用户的操作(如键盘按键、鼠标点击)封装为 “事件”,开发者只需在主循环中捕获并处理这些事件。

示例:键盘控制矩形移动
 

# 在主循环中添加以下代码

# 初始化矩形位置和速度

rect_x = 100

rect_y = 100

rect_speed = 5

while running:

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

# 检测键盘按键(持续按键有效)

keys = pygame.key.get_pressed()

if keys[pygame.K_LEFT] and rect_x > 0: # 左移,不超出屏幕左边界

rect_x -= rect_speed

if keys[pygame.K_RIGHT] and rect_x < SCREEN_WIDTH - 50: # 右移

rect_x += rect_speed

if keys[pygame.K_UP] and rect_y > 0: # 上移

rect_y -= rect_speed

if keys[pygame.K_DOWN] and rect_y < SCREEN_HEIGHT - 30: # 下移

rect_y += rect_speed

# 绘制

screen.fill((230,230,230))

pygame.draw.rect(screen, (255,0,0), (rect_x, rect_y, 50, 30))

pygame.display.flip()

关键函数

  • pygame.key.get_pressed():返回所有按键的状态(布尔值),适合处理 “持续按键”(如移动);
  • event.type == pygame.KEYDOWN:适合处理 “单次按键”(如发射子弹),需在事件循环中判断。

三、实战项目:制作简易打砖块游戏

掌握了核心概念后,我们来实现一个完整的 “打砖块” 游戏,包含挡板控制、小球反弹、砖块消除三大核心功能。

1. 游戏设计思路

  • 挡板:通过左右方向键控制,用于反弹小球;
  • 小球:初始时向下运动,碰到挡板、上下左右边界时反弹;
  • 砖块:排列在屏幕上方,小球碰到砖块后砖块消失,同时小球反弹。

2. 完整代码实现

 

import pygame

import sys

# 1. 初始化与常量设置

pygame.init()

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 600

screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

pygame.display.set_caption("简易打砖块游戏")

# 颜色定义

BLACK = (0, 0, 0)

WHITE = (255, 255, 255)

RED = (255, 0, 0)

GREEN = (0, 255, 0)

BLUE = (0, 0, 255)

# 游戏元素参数

PADDLE_WIDTH = 100

PADDLE_HEIGHT = 15

PADDLE_SPEED = 8

BALL_SIZE = 15

BALL_SPEED_X = 5

BALL_SPEED_Y = 5

BRICK_WIDTH = 70

BRICK_HEIGHT = 20

BRICK_GAP = 5

BRICK_ROWS = 5

BRICK_COLS = 10

BRICK_TOP_MARGIN = 50

# 2. 初始化游戏元素

# 挡板(居中底部)

paddle_x = (SCREEN_WIDTH - PADDLE_WIDTH) // 2

paddle_y = SCREEN_HEIGHT - 40

# 小球(初始位置在挡板中央上方)

ball_x = paddle_x + PADDLE_WIDTH // 2 - BALL_SIZE // 2

ball_y = paddle_y - BALL_SIZE

ball_dx = BALL_SPEED_X # x方向速度

ball_dy = -BALL_SPEED_Y # y方向速度(初始向上)

# 砖块矩阵(通过二维列表存储砖块位置和状态)

bricks = []

for row in range(BRICK_ROWS):

brick_row = []

for col in range(BRICK_COLS):

brick_x = col * (BRICK_WIDTH + BRICK_GAP) + (SCREEN_WIDTH - BRICK_COLS*(BRICK_WIDTH+BRICK_GAP))//2

brick_y = row * (BRICK_HEIGHT + BRICK_GAP) + BRICK_TOP_MARGIN

brick_row.append({"rect": pygame.Rect(brick_x, brick_y, BRICK_WIDTH, BRICK_HEIGHT), "active": True})

bricks.append(brick_row)

# 3. 游戏主循环

running = True

clock = pygame.time.Clock() # 控制游戏帧率

while running:

# 控制帧率为60 FPS(避免游戏速度因电脑性能差异过大)

clock.tick(60)

# 处理事件

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

# 4. 挡板控制

keys = pygame.key.get_pressed()

if keys[pygame.K_LEFT] and paddle_x > 0:

paddle_x -= PADDLE_SPEED

if keys[pygame.K_RIGHT] and paddle_x < SCREEN_WIDTH - PADDLE_WIDTH:

paddle_x += PADDLE_SPEED

# 5. 小球移动与碰撞检测

# 小球位置更新

ball_x += ball_dx

ball_y += ball_dy

# 小球与左右边界碰撞(x方向反弹)

if ball_x <= 0 or ball_x >= SCREEN_WIDTH - BALL_SIZE:

ball_dx = -ball_dx

# 小球与上边界碰撞(y方向反弹)

if ball_y <= 0:

ball_dy = -ball_dy

# 小球与挡板碰撞(y方向反弹,确保只从上方碰撞)

paddle_rect = pygame.Rect(paddle_x, paddle_y, PADDLE_WIDTH, PADDLE_HEIGHT)

ball_rect = pygame.Rect(ball_x, ball_y, BALL_SIZE, BALL_SIZE)

if ball_rect.colliderect(paddle_rect) and ball_dy > 0:

ball_dy = -ball_dy

# 小球与砖块碰撞

for row in bricks:

for brick in row:

if brick["active"] and ball_rect.colliderect(brick["rect"]):

brick["active"] = False # 消除砖块

ball_dy = -ball_dy # 小球反弹

break

# 6. 游戏结束判断(小球落地)

if ball_y >= SCREEN_HEIGHT:

font = pygame.font.Font(None, 74)

text = font.render("Game Over", True, RED)

screen.blit(text, (200, 250))

pygame.display.flip()

pygame.time.wait(3000) # 等待3秒后退出

running = False

# 7. 绘制所有元素

screen.fill(BLACK) # 黑色背景

# 绘制挡板

pygame.draw.rect(screen, WHITE, (paddle_x, paddle_y, PADDLE_WIDTH, PADDLE_HEIGHT))

# 绘制小球

pygame.draw.circle(screen, RED, (ball_x + BALL_SIZE//2, ball_y + BALL_SIZE//2), BALL_SIZE//2)

# 绘制砖块

for row in bricks:

for brick in row:

if brick["active"]:

# 不同行砖块用不同颜色

color = (0, 255 - row*40, 255)

pygame.draw.rect(screen, color, brick["rect"])

# 更新屏幕

pygame.display.flip()

# 退出游戏

pygame.quit()

sys.exit()

3. 代码核心解析

(1)砖块矩阵的创建

通过二维列表 bricks 存储每块砖块的位置(rect 对象)和激活状态(active),利用循环计算砖块的排列位置,确保居中显示。

(2)碰撞检测

Pygame 的 Rect.colliderect() 函数可快速检测两个矩形是否重叠,我们用它实现:

  • 小球与挡板的碰撞;
  • 小球与砖块的碰撞(碰撞后砖块设为 inactive,即 “消失”)。
(3)帧率控制

pygame.time.Clock().tick(60) 确保游戏每秒运行 60 次,避免小球移动速度因电脑性能不同而出现差异。

四、进阶方向:扩展你的打砖块游戏

掌握了基础版本后,你可以尝试添加以下功能,提升游戏的可玩性:

  1. 计分系统:每消除一块砖块增加分数,在屏幕上显示当前分数;
  1. 生命值:小球落地后减少一条生命,生命为 0 时游戏结束;
  1. 道具系统:随机掉落 “扩大挡板”“多球” 等道具,被挡板接住后生效;
  1. 关卡设计:增加砖块的行数、调整小球速度,实现多关卡难度递进;
  1. 音效与音乐:使用 pygame.mixer 模块添加碰撞音效和背景音乐。

五、常见问题与解决方案

  1. Q:运行程序后窗口闪退?

A:检查是否忘记写 游戏主循环,或循环内缺少 pygame.event.get()(会导致系统认为程序无响应)。

  1. Q:小球穿透砖块 / 挡板?

A:确保碰撞检测在小球位置更新后执行,且帧率不要过低(建议 60 FPS)。

  1. Q:无法正常安装 Pygame?

A:尝试使用国内镜像源安装:pip install pygame -i Simple Index

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值