Python 制作 Flappy Bird 飞鸟游戏源码深度解析
🚀 不用懂 Pygame!3分钟做出能玩的 Flappy Bird 游戏!
装了 Python 却一脸懵,根本不会用 Pygame 做东西
你好不容易装好了 Python 和 Pygame,打开编辑器却不知道从哪下手,连“怎么让一个图形出现在屏幕上”都摸不着头脑,更别说做能玩的游戏——完全卡在“第一步”,连入门的门都找不到。
✅ 别想复杂的!我把所有代码都准备好了,你只需要2步无脑操作:
单击运行 → 直接玩
打开解压后的「FlappyBird」文件夹,找到名为FlappyBird.py的文件双击运行;
稍等片刻就会弹出游戏窗口,按空格键小鸟就能飞,撞到管道会自动重启,全程不用调试、不用改代码,5分钟就能玩上你自己做的 Flappy Bird 游戏!
下载完整代码包
我把能直接运行的 Flappy Bird 完整代码包整理好了,你只需要在软件内点击【一键运行】按钮,一键获取所有文件(包含配置、代码、文件夹模板),不用自己写一行代码、加一句注释。
项目简介
基于 Python + Pygame 的 Flappy Bird 练习项目,覆盖游戏循环、精灵管理、碰撞检测、资源加载与帧率控制等机制。
开发环境
三、开发环境
- Python ==3.10
- pygame>=2.5.0
- IDE:建议 PyCharm / VSCode
项目结构
FlappyBird/ ├── cfg.py # 配置文件(常量、路径等) ├── FlappyBird.py # 游戏主程序入口 ├── modules/ # 游戏模块 │ ├── interfaces/ # 游戏界面(开始、结束) │ │ ├── startGame.py │ │ └── endGame.py │ └── sprites/ # 游戏精灵(小鸟、管道) │ ├── Bird.py │ └── Pipe.py └── resources/ # 游戏资源(图片、音频) ├── audios/ └── images/ 源码目录
抠头助手:下载工具获取源码
安装与运行(一)
1.在「代码社区」中选择「游戏开发」:

2.然后点击一键运行

操作与玩法
- 按键:
Space或↑上升;Esc退出 - 目标:穿过不断生成的管道,尽量获得更高分数
核心代码片段
初始化与主循环:
import pygame, sys clock = pygame.time.Clock() screen = pygame.display.set_mode((288,512))whileTrue:for event in pygame.event.get():if event.type== pygame.QUIT: pygame.quit(); sys.exit()elif event.type== pygame.KEYDOWN:if event.key in(pygame.K_SPACE, pygame.K_UP):pass pygame.display.update() clock.tick(60)资源加载(数字图片):
import pygame, cfg number_images ={k: pygame.image.load(v).convert_alpha()for k, v in cfg.NUMBER_IMAGE_PATHS.items()}像素级碰撞检测:
if pygame.sprite.collide_mask(bird, pipe): is_game_running =False管道生成与加入精灵组:
from modules.sprites.Pipe import Pipe pos = Pipe.randomPipe(cfg, top_image) pipe_sprites.add(Pipe(image=top_image, position=pos['top'])) pipe_sprites.add(Pipe(image=bottom_image, position=pos['bottom']))计分逻辑:
if pipe.rect.centerx < bird.rect.centerx andnot pipe.used_for_score: pipe.used_for_score =True score +=0.5帧率控制:
clock.tick(cfg.FPS)三、项目结构
项目的目录结构如下,清晰的分层有助于代码的管理和维护。
FlappyBird/ ├── cfg.py # 配置文件(常量、路径等) ├── FlappyBird.py # 游戏主程序入口 ├── modules/ # 游戏模块 │ ├── interfaces/ # 游戏界面(开始、结束) │ │ ├── startGame.py │ │ └── endGame.py │ └── sprites/ # 游戏精灵(小鸟、管道) │ ├── Bird.py │ └── Pipe.py └── resources/ # 游戏资源(图片、音频) ├── audios/ └── images/ 详细机制解析
配置文件 (cfg.py)
cfg.py 文件主要用于存储游戏中的常量配置和资源路径,方便统一管理。
- 屏幕设置:定义了屏幕的宽高 (
SCREENWIDTH,SCREENHEIGHT) 和帧率 (FPS)。 - 资源路径:使用
os.path.join拼接路径获取图片和音频文件。 - 游戏参数:如管道之间的空隙大小 (
PIPE_GAP_SIZE)。
小鸟类 (modules/sprites/Bird.py)
Bird 类继承自 pygame.sprite.Sprite,是游戏的主角。
- 初始化 (
__init__):- 加载小鸟的三种状态图片(翅膀上扬、平展、下压)。
- 初始化位置、速度(
up_speed,down_speed)和状态标志(is_flapped)。 - 利用
itertools.cycle实现翅膀扇动的循环动画。
- 更新状态 (
update):- 物理模拟:根据
is_flapped状态处理上升和下落。上升时速度递减,下落时速度递增(模拟重力)。 - 边界检测:检查小鸟是否撞到天花板或地面。
- 动画更新:通过计数器控制图片切换频率,实现扇翅膀的动画效果。
- 物理模拟:根据
- 动作控制:
setFlapped():玩家点击时调用,给予小鸟向上的速度。unsetFlapped():上升动力耗尽时调用,转为自由落体。
管道类 (modules/sprites/Pipe.py)
Pipe 类同样继承自 pygame.sprite.Sprite,负责管道的生成和属性。
- 随机生成 (
randomPipe):- 这是一个静态方法,计算管道的垂直位置。
- 保证上下管道之间留有固定的空隙 (
PIPE_GAP_SIZE)。 - 返回上管道和下管道的坐标字典。
游戏界面 (modules/interfaces/)
- 开始界面 (
startGame.py):- 显示背景、地面、小鸟(带动画)和提示信息。
- 通过
while True循环等待玩家按下空格键或向上键开始游戏。 - 地面会不断滚动,营造动态感。

- 结束界面 (
endGame.py):- 小鸟死亡后调用。
- 显示最终得分和游戏画面。
- 等待玩家按键重新开始或退出。

主程序 (FlappyBird.py)
这是游戏的入口,负责组装各个模块并运行主循环。
- 初始化 (
initGame):初始化 Pygame 和音频混合器,设置屏幕大小。 - 资源加载:读取
cfg.py中的路径,加载所有图片和声音资源。 - 游戏主循环 (
main):- 事件处理:监听退出事件 (
QUIT) 和按键事件 (KEYDOWN)。空格键触发小鸟飞翔。 - 碰撞检测:使用
pygame.sprite.collide_mask进行像素级精确碰撞检测(小鸟撞管道)。同时检测小鸟是否落地。 - 游戏逻辑更新:
- 调用
bird.update()更新小鸟位置。 - 移动地面和管道,实现向左移动的效果。
- 管道管理:
- 当管道移出屏幕左侧时移除。
- 当管道移动到一定位置时生成新管道。
- 计分:当小鸟通过管道(
pipe.rect.centerx < bird.rect.centerx)且该管道未被计分过时,增加分数。
- 调用
- 画面渲染:按照背景 -> 管道 -> 地面 -> 分数 -> 小鸟 的顺序绘制画面 (
screen.blit)。 - 帧率控制:使用
clock.tick(cfg.FPS)锁定游戏帧率。
- 事件处理:监听退出事件 (