跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python 制作 Flappy Bird 游戏源码深度解析

基于 Python 和 Pygame 库开发的 Flappy Bird 游戏项目。内容涵盖开发环境配置、项目目录结构、核心模块解析及主循环逻辑。通过配置文件管理常量,利用精灵类实现小鸟与管道交互,包含像素级碰撞检测、分数统计及帧率控制等关键机制。适合希望学习游戏开发基础流程的开发者参考。

涅槃凤凰发布于 2026/3/23更新于 2026/7/202.9K 浏览
Python 制作 Flappy Bird 游戏源码深度解析

Python 制作 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/

操作与玩法

  • 按键:Space 或 ↑ 上升;Esc 退出
  • 目标:穿过不断生成的管道,尽量获得更高分数

核心代码片段

初始化与主循环

import pygame, sys
clock = pygame.time.Clock()
screen = pygame.display.set_mode((288, 512))
while True:
    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 and not pipe.used_for_score:
    pipe.used_for_score = True
    score += 0.5

帧率控制

clock.tick(cfg.FPS)

详细机制解析

配置文件 (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)

这是游戏的入口,负责组装各个模块并运行主循环。

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

目录

  1. Python 制作 Flappy Bird 游戏源码深度解析
  2. 项目简介
  3. 开发环境
  4. 项目结构
  5. 操作与玩法
  6. 核心代码片段
  7. 初始化与主循环
  8. 资源加载(数字图片)
  9. 像素级碰撞检测
  10. 管道生成与加入精灵组
  11. 计分逻辑
  12. 帧率控制
  13. 详细机制解析
  14. 配置文件 (cfg.py)
  15. 小鸟类 (modules/sprites/Bird.py)
  16. 管道类 (modules/sprites/Pipe.py)
  17. 游戏界面 (modules/interfaces/)
  18. 主程序 (FlappyBird.py)
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 机器人数值优化基础:从理论到实战指南
  • 【AI】trae Skills使用方法
  • Llama 3.1 开源模型快速部署指南
  • AIGC 生成符合业务规则的高覆盖率测试数据集
  • Qt与Web混合编程:CEF与QCefView深度解析
  • AI 调参技巧:贝叶斯优化 Optuna
  • JavaScript Response 对象详解
  • Rust 系统编程核心技能——文件操作与网络编程基础及进阶
  • 301. 删除无效的括号
  • 6 种常用自定义数据结构设计与实现技巧
  • SpringBoot 住院管理系统的功能拆解与实现
  • Ubuntu 20.04 安装微信教程
  • VS Code Java 扩展报错需 JDK 21 的解决方案
  • AIGC 技术概览:发展历程、应用场景与社会影响分析
  • OpenClaw 多飞书机器人配置指南
  • Git 多人协作流程指南
  • VRM4U 插件在 Unreal Engine 5 中的使用指南
  • C++ 基础语法与算法初步:从循环到递归
  • Prometheus 核心函数实战:指标处理与聚合技巧
  • Solidity 智能合约开发:Coin 与 Token 区别、ERC 标准及合约继承

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online