> 技术文档 > 【Python】一文讲透Pygame教程,非常详细

【Python】一文讲透Pygame教程,非常详细

Pygame 是一个非常流行的 Python 库,用于编写视频游戏。它建立在 SDL(Simple DirectMedia Layer)库之上,提供了简单的接口来处理图形、声音和输入设备。本文将提供一个非常详细的 Pygame 教程,帮助你从零开始编写一个简单的游戏。


🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。CSDN优质创作者,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:gylzbk

💬 博主粉丝群介绍:① 群内高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

【Python】一文讲透Pygame教程,非常详细

  • 1️⃣ 安装 Pygame
    • 1.1 使用 pip 安装
    • 1.2 检查安装
  • 2️⃣ 创建一个简单的 Pygame 窗口
    • 2.1 导入 Pygame 模块
    • 2.2 创建一个窗口
    • 2.3 主循环
    • 2.4 完整代码
  • 3️⃣ 绘制图形
    • 3.1 设置颜色
    • 3.2 绘制矩形
    • 3.3 绘制圆形
    • 3.4 更新屏幕
    • 3.5 完整代码
  • 4️⃣ 加载和显示图像
    • 4.1 加载图像
    • 4.2 显示图像
    • 4.3 完整代码
  • 5️⃣ 处理用户输入
    • 5.1 处理键盘输入
    • 5.2 处理鼠标输入
    • 5.3 完整代码
  • 6️⃣ 移动图像
    • 6.1 更新图像位置
    • 6.2 完整代码
  • 7️⃣ 添加背景音乐和音效
    • 7.1 初始化混音器
    • 7.2 加载和播放背景音乐
    • 7.3 加载和播放音效
    • 7.4 完整代码
  • 8️⃣ 处理碰撞检测
    • 8.1 碰撞检测基础
    • 8.2 示例:简单的碰撞检测
  • 9️⃣ 动画与帧率控制
    • 9.1 使用 `pygame.time.Clock` 控制帧率
    • 9.2 动画示例
  • 🔟 总结

在这里插入图片描述

1️⃣ 安装 Pygame

1.1 使用 pip 安装

你可以使用 pip 来安装 Pygame:

pip install pygame

1.2 检查安装

安装完成后,可以通过以下命令检查是否安装成功:

python -m pygame.examples.aliens

如果看到一个简单的游戏窗口,说明 Pygame 安装成功。

2️⃣ 创建一个简单的 Pygame 窗口

2.1 导入 Pygame 模块

首先,我们需要导入 Pygame 模块并初始化它:

import pygamepygame.init()

2.2 创建一个窗口

接下来,我们创建一个窗口并设置窗口的标题:

# 设置窗口尺寸window_size = (800, 600)screen = pygame.display.set_mode(window_size)# 设置窗口标题pygame.display.set_caption(\"My First Pygame Window\")

2.3 主循环

Pygame 需要一个主循环来保持窗口的打开状态,并处理各种事件。以下是一个简单的主循环示例:

# 主循环标志running = True# 主循环while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False# 退出 Pygamepygame.quit()

2.4 完整代码

import pygame# 初始化 Pygamepygame.init()# 设置窗口尺寸window_size = (800, 600)screen = pygame.display.set_mode(window_size)# 设置窗口标题pygame.display.set_caption(\"My First Pygame Window\")# 主循环标志running = True# 主循环while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False# 退出 Pygamepygame.quit()

运行这段代码,你会看到一个简单的 Pygame 窗口,点击关闭按钮可以退出窗口。

3️⃣ 绘制图形

3.1 设置颜色

Pygame 使用 RGB 颜色值来设置颜色。以下是一些常见颜色的定义:

WHITE = (255, 255, 255)BLACK = (0, 0, 0)RED = (255, 0, 0)GREEN = (0, 255, 0)BLUE = (0, 0, 255)

3.2 绘制矩形

我们可以使用 pygame.draw.rect 来绘制矩形:

pygame.draw.rect(screen, RED, (100, 100, 50, 50))

3.3 绘制圆形

我们可以使用 pygame.draw.circle 来绘制圆形:

pygame.draw.circle(screen, BLUE, (200, 200), 30)

3.4 更新屏幕

绘制完图形后,需要更新屏幕以显示图形:

pygame.display.flip()

3.5 完整代码

import pygame# 初始化 Pygamepygame.init()# 设置窗口尺寸window_size = (800, 600)screen = pygame.display.set_mode(window_size)# 设置窗口标题pygame.display.set_caption(\"Drawing Shapes\")# 定义颜色WHITE = (255, 255, 255)RED = (255, 0, 0)BLUE = (0, 0, 255)# 主循环标志running = True# 主循环while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 填充背景色 screen.fill(WHITE) # 绘制矩形 pygame.draw.rect(screen, RED, (100, 100, 50, 50)) # 绘制圆形 pygame.draw.circle(screen, BLUE, (200, 200), 30) # 更新屏幕 pygame.display.flip()# 退出 Pygamepygame.quit()

运行这段代码,你会看到一个窗口,里面绘制了一个红色的矩形和一个蓝色的圆形。

4️⃣ 加载和显示图像

1

4.1 加载图像

在游戏开发中,经常需要加载和显示图像。Pygame 提供了简单的接口来加载图像。首先,确保你有一个图像文件(例如 player.png)保存在你的项目目录中。

使用 pygame.image.load 函数加载图像:

player_image = pygame.image.load(\'player.png\')

4.2 显示图像

加载图像后,可以使用 blit 方法将图像绘制到屏幕上:

screen.blit(player_image, (100, 100))

4.3 完整代码

以下是一个完整的示例代码,演示如何加载和显示图像:

import pygame# 初始化 Pygamepygame.init()# 设置窗口尺寸window_size = (800, 600)screen = pygame.display.set_mode(window_size)# 设置窗口标题pygame.display.set_caption(\"Display Image\")# 加载图像player_image = pygame.image.load(\'player.png\')# 主循环标志running = True# 主循环while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 填充背景色 screen.fill((255, 255, 255)) # 显示图像 screen.blit(player_image, (100, 100)) # 更新屏幕 pygame.display.flip()# 退出 Pygamepygame.quit()

运行这段代码,你会看到一个窗口,里面显示了加载的图像。

5️⃣ 处理用户输入

5.1 处理键盘输入

Pygame 提供了简单的接口来处理键盘输入。你可以在主循环中检测按键事件:

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(\"Left arrow key pressed\") elif event.key == pygame.K_RIGHT: print(\"Right arrow key pressed\")

5.2 处理鼠标输入

你也可以处理鼠标事件,例如检测鼠标点击:

for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.MOUSEBUTTONDOWN: print(\"Mouse button pressed at\", event.pos)

5.3 完整代码

以下是一个完整的示例代码,演示如何处理键盘和鼠标输入:

import pygame# 初始化 Pygamepygame.init()# 设置窗口尺寸window_size = (800, 600)screen = pygame.display.set_mode(window_size)# 设置窗口标题pygame.display.set_caption(\"Handle Input\")# 加载图像player_image = pygame.image.load(\'player.png\')# 主循环标志running = True# 主循环while running: 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(\"Left arrow key pressed\") elif event.key == pygame.K_RIGHT: print(\"Right arrow key pressed\") elif event.type == pygame.MOUSEBUTTONDOWN: print(\"Mouse button pressed at\", event.pos) # 填充背景色 screen.fill((255, 255, 255)) # 显示图像 screen.blit(player_image, (100, 100)) # 更新屏幕 pygame.display.flip()# 退出 Pygamepygame.quit()

运行这段代码,你可以在控制台看到键盘和鼠标事件的输出。

6️⃣ 移动图像

6.1 更新图像位置

为了让图像在屏幕上移动,我们需要更新图像的位置。可以使用变量来存储图像的位置,并在主循环中更新这些变量:

player_x = 100player_y = 100# 移动图像player_x += 1

6.2 完整代码

以下是一个完整的示例代码,演示如何在屏幕上移动图像:

import pygame# 初始化 Pygamepygame.init()# 设置窗口尺寸window_size = (800, 600)screen = pygame.display.set_mode(window_size)# 设置窗口标题pygame.display.set_caption(\"Move Image\")# 加载图像player_image = pygame.image.load(\'player.png\')# 初始化图像位置player_x = 100player_y = 100# 主循环标志running = True# 主循环while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player_x -= 5 elif event.key == pygame.K_RIGHT: player_x += 5 elif event.key == pygame.K_UP: player_y -= 5 elif event.key == pygame.K_DOWN: player_y += 5 # 填充背景色 screen.fill((255, 255, 255)) # 显示图像 screen.blit(player_image, (player_x, player_y)) # 更新屏幕 pygame.display.flip()# 退出 Pygamepygame.quit()

运行这段代码,你可以使用箭头键移动图像。

7️⃣ 添加背景音乐和音效

7.1 初始化混音器

在 Pygame 中,可以使用 pygame.mixer 模块来处理声音。首先,需要初始化混音器:

pygame.mixer.init()

7.2 加载和播放背景音乐

可以使用 pygame.mixer.music 模块加载和播放背景音乐:

pygame.mixer.music.load(\'background.mp3\')pygame.mixer.music.play(-1) # -1 表示循环播放

7.3 加载和播放音效

可以使用 pygame.mixer.Sound 类加载和播放音效:

collision_sound = pygame.mixer.Sound(\'collision.wav\')collision_sound.play()

7.4 完整代码

以下是一个完整的示例代码,演示如何添加背景音乐和音效:

import pygame# 初始化 Pygamepygame.init()# 初始化混音器pygame.mixer.init()# 设置窗口尺寸window_size = (800, 600)screen = pygame.display.set_mode(window_size)# 设置窗口标题pygame.display.set_caption(\"Music and Sound Effects\")# 加载图像player_image = pygame.image.load(\'player.png\')# 初始化图像位置player_x = 100player_y = 100# 加载背景音乐和音效pygame.mixer.music.load(\'background.mp3\')pygame.mixer.music.play(-1) # -1 表示循环播放collision_sound = pygame.mixer.Sound(\'collision.wav\')# 主循环标志running = True# 主循环while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: player_x -= 5 elif event.key == pygame.K_RIGHT: player_x += 5 elif event.key == pygame.K_UP: player_y -= 5 elif event.key == pygame.K_DOWN: player_y += 5 elif event.key == pygame.K_SPACE: collision_sound.play() # 按下空格键播放音效 # 填充背景色 screen.fill((255, 255, 255)) # 显示图像 screen.blit(player_image, (player_x, player_y)) # 更新屏幕 pygame.display.flip()# 退出 Pygamepygame.quit()

运行这段代码,背景音乐会开始播放,并且按下空格键时会播放音效。

8️⃣ 处理碰撞检测

8.1 碰撞检测基础

Pygame 提供了多种方法来检测对象之间的碰撞。我们可以使用 pygame.Rect 对象来定义矩形区域,并使用 colliderect 方法来检测两个矩形是否碰撞。

8.2 示例:简单的碰撞检测

import pygame# 初始化 Pygamepygame.init()# 设置窗口尺寸window_size = (800, 600)screen = pygame.display.set_mode(window_size)# 设置窗口标题pygame.display.set_caption(\"Collision Detection\")# 定义颜色WHITE = (255, 255, 255)RED = (255, 0, 0)BLUE = (0, 0, 255)# 初始化矩形位置rect1 = pygame.Rect(100, 100, 50, 50)rect2 = pygame.Rect(300, 300, 50, 50)# 主循环标志running = True# 主循环while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: rect1.x -= 5 elif event.key == pygame.K_RIGHT: rect1.x += 5 elif event.key == pygame.K_UP: rect1.y -= 5 elif event.key == pygame.K_DOWN: rect1.y += 5 # 填充背景色 screen.fill(WHITE) # 绘制矩形 pygame.draw.rect(screen, RED, rect1) pygame.draw.rect(screen, BLUE, rect2) # 碰撞检测 if rect1.colliderect(rect2): print(\"Collision detected!\") # 更新屏幕 pygame.display.flip()# 退出 Pygamepygame.quit()

运行这段代码,你可以使用箭头键移动红色矩形,当红色矩形与蓝色矩形碰撞时,控制台会输出 “Collision detected!”。

9️⃣ 动画与帧率控制

9.1 使用 pygame.time.Clock 控制帧率

为了控制游戏的帧率,我们可以使用 pygame.time.Clock 对象。它允许我们设置每秒的帧数(FPS),从而控制游戏的速度。

clock = pygame.time.Clock()

在主循环的每一帧末尾,调用 clock.tick(fps) 来限制帧率:

clock.tick(60) # 设置帧率为 60 FPS

9.2 动画示例

以下是一个简单的动画示例,演示如何使用 pygame.time.Clock 控制帧率:

import pygame# 初始化 Pygamepygame.init()# 设置窗口尺寸window_size = (800, 600)screen = pygame.display.set_mode(window_size)# 设置窗口标题pygame.display.set_caption(\"Animation with Frame Rate Control\")# 定义颜色WHITE = (255, 255, 255)RED = (255, 0, 0)# 初始化矩形位置和速度rect = pygame.Rect(100, 100, 50, 50)rect_speed = [2, 2]# 创建时钟对象clock = pygame.time.Clock()# 主循环标志running = True# 主循环while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # 移动矩形 rect.x += rect_speed[0] rect.y += rect_speed[1] # 碰到边界反弹 if rect.left < 0 or rect.right > window_size[0]: rect_speed[0] = -rect_speed[0] if rect.top < 0 or rect.bottom > window_size[1]: rect_speed[1] = -rect_speed[1] # 填充背景色 screen.fill(WHITE) # 绘制矩形 pygame.draw.rect(screen, RED, rect) # 更新屏幕 pygame.display.flip() # 控制帧率 clock.tick(60) # 设置帧率为 60 FPS# 退出 Pygamepygame.quit()

运行这段代码,你会看到一个红色矩形在窗口中移动并反弹。

🔟 总结

通过这篇详细的 Pygame 教程,你已经学会了如何:

  1. 安装 Pygame。
  2. 创建一个简单的 Pygame 窗口。
  3. 绘制图形。
  4. 加载和显示图像。
  5. 处理用户输入(键盘和鼠标)。
  6. 移动图像。
  7. 添加背景音乐和音效。
  8. 处理碰撞检测。
  9. 实现动画并控制帧率。

这些基础知识将帮助你开始使用 Pygame 开发自己的游戏。