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

1️⃣ 安装 Pygame

1.1 使用 pip 安装

你可以使用 pip 来安装 Pygame:

bash 复制代码
pip install pygame

1.2 检查安装

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

bash 复制代码
python -m pygame.examples.aliens

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

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

2.1 导入 Pygame 模块

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

python 复制代码
import pygame
pygame.init()

2.2 创建一个窗口

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

python 复制代码
# 设置窗口尺寸
window_size = (800, 600)
screen = pygame.display.set_mode(window_size)

# 设置窗口标题
pygame.display.set_caption("My First Pygame Window")

2.3 主循环

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

python 复制代码
# 主循环标志
running = True

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

# 退出 Pygame
pygame.quit()

2.4 完整代码

python 复制代码
import pygame

# 初始化 Pygame
pygame.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

# 退出 Pygame
pygame.quit()

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

3️⃣ 绘制图形

3.1 设置颜色

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

python 复制代码
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 来绘制矩形:

python 复制代码
pygame.draw.rect(screen, RED, (100, 100, 50, 50))

3.3 绘制圆形

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

python 复制代码
pygame.draw.circle(screen, BLUE, (200, 200), 30)

3.4 更新屏幕

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

python 复制代码
pygame.display.flip()

3.5 完整代码

python 复制代码
import pygame

# 初始化 Pygame
pygame.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()

# 退出 Pygame
pygame.quit()

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

4️⃣ 加载和显示图像

1

4.1 加载图像

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

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

python 复制代码
player_image = pygame.image.load('player.png')

4.2 显示图像

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

python 复制代码
screen.blit(player_image, (100, 100))

4.3 完整代码

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

python 复制代码
import pygame

# 初始化 Pygame
pygame.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()

# 退出 Pygame
pygame.quit()

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

5️⃣ 处理用户输入

5.1 处理键盘输入

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

python 复制代码
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 处理鼠标输入

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

python 复制代码
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 完整代码

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

python 复制代码
import pygame

# 初始化 Pygame
pygame.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()

# 退出 Pygame
pygame.quit()

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

6️⃣ 移动图像

6.1 更新图像位置

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

python 复制代码
player_x = 100
player_y = 100

# 移动图像
player_x += 1

6.2 完整代码

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

python 复制代码
import pygame

# 初始化 Pygame
pygame.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 = 100
player_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()

# 退出 Pygame
pygame.quit()

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

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

7.1 初始化混音器

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

python 复制代码
pygame.mixer.init()

7.2 加载和播放背景音乐

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

python 复制代码
pygame.mixer.music.load('background.mp3')
pygame.mixer.music.play(-1)  # -1 表示循环播放

7.3 加载和播放音效

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

python 复制代码
collision_sound = pygame.mixer.Sound('collision.wav')
collision_sound.play()

7.4 完整代码

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

python 复制代码
import pygame

# 初始化 Pygame
pygame.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 = 100
player_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()

# 退出 Pygame
pygame.quit()

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

8️⃣ 处理碰撞检测

8.1 碰撞检测基础

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

8.2 示例:简单的碰撞检测

python 复制代码
import pygame

# 初始化 Pygame
pygame.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()

# 退出 Pygame
pygame.quit()

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

9️⃣ 动画与帧率控制

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

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

python 复制代码
clock = pygame.time.Clock()

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

python 复制代码
clock.tick(60)  # 设置帧率为 60 FPS

9.2 动画示例

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

python 复制代码
import pygame

# 初始化 Pygame
pygame.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

# 退出 Pygame
pygame.quit()

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

🔟 总结

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

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

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

相关推荐
别让别人觉得你做不到16 分钟前
Python(1) 做一个随机数的游戏
python
巨龙之路23 分钟前
C语言中的assert
c语言·开发语言
2301_776681651 小时前
【用「概率思维」重新理解生活】
开发语言·人工智能·自然语言处理
小彭律师2 小时前
人脸识别门禁系统技术文档
python
熊大如如2 小时前
Java 反射
java·开发语言
ll7788112 小时前
C++学习之路,从0到精通的征途:继承
开发语言·数据结构·c++·学习·算法
我不想当小卡拉米2 小时前
【Linux】操作系统入门:冯诺依曼体系结构
linux·开发语言·网络·c++
teacher伟大光荣且正确3 小时前
Qt Creator 配置 Android 编译环境
android·开发语言·qt
炎芯随笔3 小时前
【C++】【设计模式】生产者-消费者模型
开发语言·c++·设计模式
乌鸦9443 小时前
《类和对象(下)》
开发语言·c++·类和对象+