首页 > Python资料 博客日记
【Python】一文讲透Pygame教程,非常详细
2024-10-25 08:00:05Python资料围观33次
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 安装
你可以使用 pip 来安装 Pygame:
pip install pygame
1.2 检查安装
安装完成后,可以通过以下命令检查是否安装成功:
python -m pygame.examples.aliens
如果看到一个简单的游戏窗口,说明 Pygame 安装成功。
2️⃣ 创建一个简单的 Pygame 窗口
2.1 导入 Pygame 模块
首先,我们需要导入 Pygame 模块并初始化它:
import pygame
pygame.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
# 退出 Pygame
pygame.quit()
2.4 完整代码
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 颜色值来设置颜色。以下是一些常见颜色的定义:
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
# 初始化 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
函数加载图像:
player_image = pygame.image.load('player.png')
4.2 显示图像
加载图像后,可以使用 blit
方法将图像绘制到屏幕上:
screen.blit(player_image, (100, 100))
4.3 完整代码
以下是一个完整的示例代码,演示如何加载和显示图像:
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 提供了简单的接口来处理键盘输入。你可以在主循环中检测按键事件:
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
# 初始化 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 更新图像位置
为了让图像在屏幕上移动,我们需要更新图像的位置。可以使用变量来存储图像的位置,并在主循环中更新这些变量:
player_x = 100
player_y = 100
# 移动图像
player_x += 1
6.2 完整代码
以下是一个完整的示例代码,演示如何在屏幕上移动图像:
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
模块来处理声音。首先,需要初始化混音器:
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
# 初始化 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 示例:简单的碰撞检测
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),从而控制游戏的速度。
clock = pygame.time.Clock()
在主循环的每一帧末尾,调用 clock.tick(fps)
来限制帧率:
clock.tick(60) # 设置帧率为 60 FPS
9.2 动画示例
以下是一个简单的动画示例,演示如何使用 pygame.time.Clock
控制帧率:
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 教程,你已经学会了如何:
- 安装 Pygame。
- 创建一个简单的 Pygame 窗口。
- 绘制图形。
- 加载和显示图像。
- 处理用户输入(键盘和鼠标)。
- 移动图像。
- 添加背景音乐和音效。
- 处理碰撞检测。
- 实现动画并控制帧率。
这些基础知识将帮助你开始使用 Pygame 开发自己的游戏。
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj