目录
-
Pygame 简介
-
环境搭建与安装
-
核心概念解析
-
游戏循环 (Game Loop)
-
坐标系统
-
-
第一个 Pygame 程序
-
代码详解
-
-
事件处理机制
-
图形绘制
-
完整游戏示例
-
进阶技巧
-
使用 Sprite 类
-
加载图像和音频
-
文字渲染
-
-
总结与资源
Pygame 简介
Pygame 是一个基于 Python 的游戏开发库,它封装了 SDL (Simple DirectMedia Layer) 库,为开发二维游戏提供了简单而强大的 API。Pygame 是学习游戏开发的绝佳入门选择,特别适合初学者快速上手。
Pygame 的主要特点包括:
-
跨平台兼容性强 – 支持 Windows、macOS、Linux 等多个平台
-
社区活跃 – 拥有庞大的开发者社区和丰富的教程资源
-
文档丰富 – 官方文档详尽,示例代码充足
-
学习曲线平缓 – API 设计简洁,易于理解和使用
无论你想制作简单的小游戏,还是学习游戏开发的基本概念,Pygame 都是一个不错的选择。
环境搭建与安装
安装 Pygame 非常简单,只需要确保你已经安装了 Python 3.6+,然后使用 pip 安装即可:
pip install pygame
安装完成后,可以通过以下代码验证安装是否成功:
import pygame
print(pygame.__version__) # 输出版本号
核心概念解析
在开始编写游戏之前,我们需要了解 Pygame 的几个核心概念:
游戏循环 (Game Loop)
游戏循环是游戏开发的核心机制。它是一个持续运行的循环,负责处理以下三个主要任务:
事件处理 – 响应用户输入(键盘、鼠标等)
游戏更新 – 更新游戏状态和对象位置
画面渲染 – 将游戏内容绘制到屏幕上
┌─────────────────────────────────────┐
│ 游戏循环开始 │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 1. 处理事件 (pygame.event.get()) │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 2. 更新游戏状态 (update logic) │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 3. 渲染画面 (screen.fill/draw) │
└──────────────┬──────────────────────┘
▼
┌─────────────────────────────────────┐
│ 4. 更新显示 (pygame.display.flip) │
└──────────────┬──────────────────────┘
│
└──────→ 回到第 1 步
坐标系统
Pygame 使用屏幕坐标系,原点 (0, 0) 位于屏幕左上角。X 轴向右增加,Y 轴向下增加。这一点与数学中的坐标系有所不同,需要注意。
(0,0) ───────────────────────→ X
│
│ ● (200, 150)
│
│
↓
Y
第一个 Pygame 程序
下面是一个最简单的 Pygame 程序,它创建了一个窗口并填充为白色:
import pygame
import sys
# 初始化 Pygame
pygame.init()
# 设置屏幕尺寸
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("我的第一个 Pygame 游戏")
# 设置颜色
WHITE = (255, 255, 255)
# 游戏循环
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 填充背景
screen.fill(WHITE)
# 更新显示
pygame.display.flip()
pygame.quit()
sys.exit()
代码详解
让我们逐行解析上面的代码:
| pygame.init() | 初始化 Pygame 模块,必须在使用其他功能之前调用 |
| display.set_mode() | 创建游戏窗口,参数是宽度和高度的元组 |
| event.get() | 获取所有待处理的事件 |
| screen.fill() | 用指定颜色填充屏幕 |
| display.flip() | 更新屏幕显示,将缓冲区内容显示到屏幕上 |
事件处理机制
Pygame 使用事件驱动的编程模式。常见的事件类型包括:
| pygame.QUIT | 用户关闭窗口 |
| pygame.KEYDOWN | 键盘按键被按下 |
| pygame.KEYUP | 键盘按键被释放 |
| pygame.MOUSEBUTTONDOWN | 鼠标按键被按下 |
| pygame.MOUSEMOTION | 鼠标移动 |
以下是键盘事件处理的示例:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
print("左方向键被按下")
elif event.key == pygame.K_RIGHT:
print("右方向键被按下")
图形绘制
Pygame 提供了丰富的绘图函数,可以绘制各种基本图形:
import pygame
# 绘制矩形
pygame.draw.rect(screen, (255, 0, 0), (100, 100, 200, 150))
# 绘制圆形
pygame.draw.circle(screen, (0, 255, 0), (400, 300), 50)
# 绘制椭圆
pygame.draw.ellipse(screen, (0, 0, 255), (500, 200, 150, 100))
# 绘制线条
pygame.draw.line(screen, (255, 255, 0), (0, 0), (800, 600), 5)
# 绘制多边形
points = [(100, 500), (200, 400), (300, 500)]
pygame.draw.polygon(screen, (255, 0, 255), points)
完整游戏示例
下面是一个完整的"接球"游戏示例,展示了 Pygame 的各项功能:
import pygame
import sys
import random
# 初始化
pygame.init()
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("接球游戏")
clock = pygame.time.Clock()
# 颜色定义
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
# 振板设置
paddle_width = 100
paddle_height = 15
paddle_x = WIDTH // 2 – paddle_width // 2
paddle_y = HEIGHT – 50
paddle_speed = 8
# 小球设置
ball_radius = 10
ball_x = WIDTH // 2
ball_y = HEIGHT // 2
ball_speed_x = random.choice([-4, 4])
ball_speed_y = -4
# 分数
score = 0
font = pygame.font.Font(None, 36)
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_LEFT] and paddle_x > 0:
paddle_x -= paddle_speed
if keys[pygame.K_RIGHT] and paddle_x < WIDTH – paddle_width:
paddle_x += paddle_speed
# 更新小球位置
ball_x += ball_speed_x
ball_y += ball_speed_y
# 碰撞检测
if ball_x – ball_radius <= 0 or ball_x + ball_radius >= WIDTH:
ball_speed_x *= -1
if ball_y – ball_radius <= 0:
ball_speed_y *= -1
# 振板碰撞
if (paddle_y <= ball_y + ball_radius <= paddle_y + paddle_height and
paddle_x <= ball_x <= paddle_x + paddle_width):
ball_speed_y *= -1
score += 10
# 游戏结束
if ball_y > HEIGHT:
ball_x = WIDTH // 2
ball_y = HEIGHT // 2
score = 0
# 绘制
screen.fill(BLACK)
pygame.draw.rect(screen, BLUE, (paddle_x, paddle_y, paddle_width, paddle_height))
pygame.draw.circle(screen, RED, (int(ball_x), int(ball_y)), ball_radius)
# 显示分数
score_text = font.render(f"Score: {score}", True, WHITE)
screen.blit(score_text, (10, 10))
pygame.display.flip()
clock.tick(60)
pygame.quit()
sys.exit()
进阶技巧
使用 Sprite 类
对于复杂的游戏,建议使用 Pygame 的 Sprite 类来管理游戏对象:
class Ball(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((20, 20))
self.image.fill((255, 0, 0))
self.rect = self.image.get_rect()
self.rect.center = (400, 300)
self.speed_x = 5
self.speed_y = 5
def update(self):
self.rect.x += self.speed_x
self.rect.y += self.speed_y
# 使用
ball = Ball()
all_sprites = pygame.sprite.Group()
all_sprites.add(ball)
all_sprites.update()
all_sprites.draw(screen)
加载图像和音频
Pygame 支持加载外部资源:
# 加载图像
player_image = pygame.image.load("player.png")
player_image = pygame.transform.scale(player_image, (50, 50))
# 加载音频
pygame.mixer.init()
sound = pygame.mixer.Sound("jump.wav")
sound.play()
# 背景音乐
pygame.mixer.music.load("bgm.mp3")
pygame.mixer.music.play(-1) # 循环播放
文字渲染
显示文字是游戏开发中的常见需求:
# 创建字体对象
font = pygame.font.Font(None, 48) # 使用系统默认字体
# font = pygame.font.Font("arial.ttf", 48) # 使用自定义字体
# 渲染文字
text = font.render("Hello Pygame!", True, (255, 255, 255))
# 显示到屏幕
screen.blit(text, (300, 250))
总结与资源
本文主要介绍了Pygame 的基本用法,包括:
环境搭建 – 安装 Pygame 库
游戏循环 – 事件处理、更新、渲染的循环机制
图形绘制 – 基本图形的绘制方法
事件处理 – 键盘和鼠标事件的响应
进阶技巧 – Sprite、音频、文字等
接下来,你可以尝试修改示例代码,添加更多功能,如增加关卡、道具系统、敌人 AI 等,进一步提升你的游戏开发技能。
推荐资源
| 官方文档 | https://www.pygame.org/docs/ |
| GitHub | https://github.com/pygame/pygame |
| 社区论坛 | https://www.pygame.org/contribute.html |
| 教程推荐 | https://kidscancode.org/lessons/ |
感谢友友们支持,给博主点个关注吧~




