当前位置:首页>python>手把手教你用Python做爆款小游戏:Flappy Bird完整源码+教程

手把手教你用Python做爆款小游戏:Flappy Bird完整源码+教程

  • 2026-09-13 11:44:38
手把手教你用Python做爆款小游戏:Flappy Bird完整源码+教程

大家好呀!今天给大家带来一个超有趣的Python实战项目——经典Flappy Bird小鸟飞飞游戏。

这个项目用Pygame库实现,包含了小鸟飞行、管道生成、碰撞检测、计分、最高分记录、音量调节等完整功能,代码注释超详细,零基础也能轻松看懂、直接运行!

一、项目效果展示

✅ 小鸟扇动翅膀动画 

✅ 随机生成上下管道 

✅ 空格键控制小鸟飞行 

✅ 实时计分+最高分记录 

✅ 音量调节(上下方向键) 

✅ 精准碰撞检测(碰到管道/边界游戏结束) 

✅ 开始界面+游戏重启功能

  • 游戏开始界面

  • 游戏中......

  • 游戏结束

  • 运行视频

二、准备工作

1. 安装依赖库

首先打开电脑的命令提示符(CMD),输入一行代码安装游戏库:

pip install pygame

2. 素材准备

项目需要图片和音频素材,新建一个项目文件夹,里面创建两个子文件夹:

  • img/:存放所有图片素材
  • Sounds/:存放背景音乐

我把全套免费素材放在文末了,直接下载就能用!

三、完整源码(可直接复制运行)

import pygameimport sysimport randomimport datetime# 创建小鸟类,继承动画精灵类,封装小鸟所有属性和行为classBird(pygame.sprite.Sprite):def__init__(self, images):        pygame.sprite.Sprite.__init__(self)  # 初始化精灵基类        self.images = images  # 接收小鸟的3张动画图片        self.image = images[0]  # 默认显示第一张图片        self.mask = pygame.mask.from_surface(self.image)  # 精准碰撞检测轮廓        self.rect = self.image.get_rect()        self.rect.x = 150# 小鸟初始X坐标        self.rect.y = 200# 小鸟初始Y坐标        self.speed = 0# 初始飞行速度        self.frame = 1# 动画帧标记defupdate(self):# 模拟重力:速度不断增加,小鸟自动下落        self.speed += 0.5        self.rect.y += self.speed# 切换翅膀动画        self.frame += 1if self.frame > 3:            self.frame = 1        self.image = self.images[self.frame - 1]# 创建管道类,实现管道自动移动classPipe(pygame.sprite.Sprite):def__init__(self, image, top):        pygame.sprite.Sprite.__init__(self)        self.image = image        self.mask = pygame.mask.from_surface(self.image)        self.rect = self.image.get_rect()        self.rect.topleft = width, top  # 管道从屏幕右侧出现defupdate(self):# 管道向左移动        self.rect.x -= 5# 管道移出屏幕后自动销毁if self.rect.right < 0:            self.kill()# ===================== 游戏初始化 =====================pygame.init()pygame.display.set_caption("小鸟飞飞")  # 窗口标题width, height = 700, 500# 游戏窗口尺寸screen = pygame.display.set_mode((width, height))clock = pygame.time.Clock()  # 控制游戏帧率# 加载背景图片bg = pygame.image.load("./img/bg_day.png").convert()bg = pygame.transform.smoothscale(bg, (width, height))# 游戏全局变量run = False# 游戏运行状态(False=未开始,True=进行中)score = 0# 当前分数HighScore = 0# 历史最高分volume = 1.0# 背景音乐音量# 加载小鸟3张动画图片birdList = []for i in range(3):    bird_img = pygame.image.load(f"./img/bird0_{i}.png").convert_alpha()    birdList.append(bird_img)bird = Bird(birdList)# 创建管道精灵组(统一管理管道)pipeGroup = pygame.sprite.Group()pipeDownImage = pygame.image.load("./img/pipe_up.png").convert_alpha()pipeUpImage = pygame.image.load("./img/pipe_down.png").convert_alpha()# 生成第一组管道upTop = random.randint(-300, 0)space = random.randint(100, 200)  # 上下管道间隙downTop = 320 + upTop + spacepipeUP = Pipe(pipeUpImage, upTop)pipeDown = Pipe(pipeDownImage, downTop)pipeGroup.add(pipeUP, pipeDown)# ===================== 游戏主循环 =====================whileTrue:    screen.blit(bg, (0, 0))  # 绘制背景# 监听所有事件for event in pygame.event.get():# 关闭窗口退出游戏if event.type == pygame.QUIT:            pygame.quit()            sys.exit()# 键盘按键事件if event.type == pygame.KEYDOWN:# 空格键:开始游戏/控制小鸟飞行if event.key == pygame.K_SPACE:ifnot run:# 重置游戏数据                    score = 0                    bird = Bird(birdList)                    pipeGroup = pygame.sprite.Group()# 重新生成初始管道                    upTop = random.randint(-300, 0)                    space = random.randint(100, 200)                    downTop = 320 + upTop + space                    pipeGroup.add(Pipe(pipeUpImage, upTop), Pipe(pipeDownImage, downTop))                    run = Trueelse:# 小鸟向上飞                    bird.speed = -8# 方向键上:增加音量if event.key == pygame.K_UP and volume < 1:                volume += 0.1# 方向键下:减小音量if event.key == pygame.K_DOWN and volume > 0:                volume -= 0.1            pygame.mixer.music.set_volume(volume)# ===================== 游戏未开始:显示开始界面 =====================ifnot run:# 加载并循环播放背景音乐        pygame.mixer.music.load("./Sounds/TownTheme.mp3")        pygame.mixer.music.set_volume(volume)        pygame.mixer.music.play(-1)# 绘制提示文字        font = pygame.font.SysFont("Arial", 36)        start_text = font.render("Press Space to Start Game", True, (0, 0, 0))        high_score_text = font.render(f"High Score: {HighScore}", True, (0, 0, 0))        screen.blit(start_text, (200, 200))        screen.blit(high_score_text, (200, 300))# ===================== 游戏运行中 =====================else:# 绘制并更新小鸟        screen.blit(bird.image, bird.rect)        bird.update()# 绘制并更新所有管道        pipeGroup.draw(screen)        pipeGroup.update()# 显示当前分数        font = pygame.font.SysFont("Arial", 36)        score_text = font.render(f"Score: {score}", True, (0, 0, 0))        screen.blit(score_text, (0, 0))# 自动生成新管道if pipeGroup.sprites()[-1].rect.left < random.randint(150, 300):            upTop = random.randint(-300, 0)            space = random.randint(100, 200)            downTop = 320 + upTop + space            pipeGroup.add(Pipe(pipeUpImage, upTop), Pipe(pipeDownImage, downTop))# 计分逻辑:小鸟飞过管道+1分if bird.rect.x - 10 == pipeGroup.sprites()[0].rect.x:            score += 1            HighScore = max(score, HighScore)# 碰撞检测:碰到管道/飞出屏幕边界→游戏结束        collision = pygame.sprite.spritecollide(bird, pipeGroup, False, pygame.sprite.collide_mask)if collision or bird.rect.y < 0or bird.rect.y > height:            run = False            pygame.time.wait(500)# 更新屏幕画面    pygame.display.update()    clock.tick(60)  # 固定60帧

四、游戏操作说明

  1. 开始游戏:按下空格键
  2. 控制飞行:持续按空格键让小鸟向上飞,松开自动下落
  3. 音量调节:
    • 方向键↑:增大音量
    • 方向键↓:减小音量
  4. 结束条件:小鸟碰到管道、飞出屏幕顶部/底部,游戏结束
  5. 重新开始:再次按空格键即可

五、核心知识点讲解(零基础必看)

1. 精灵类(Sprite)

pygame.sprite.Sprite是游戏对象的基类,我们把小鸟、管道都封装成精灵,方便统一管理、移动和碰撞检测。

2. 重力模拟

通过代码 self.speed += 0.5 实现重力效果,小鸟的下落速度会越来越快,完美还原原版游戏手感。

3. 精准碰撞检测

使用 mask 碰撞模式,只检测图片的有效区域,而不是矩形边框,碰撞效果更真实。

4. 无限管道生成

管道从右侧生成,向左移动,移出屏幕后自动销毁,同时动态生成新管道,实现无限闯关效果。

5. 计分逻辑

判断小鸟的X坐标超过管道X坐标,自动+1分,并实时更新最高分。

六、全套素材下载

我整理了游戏需要的所有图片+音频素材,免费分享给大家!

下载后直接解压,把img和Sounds文件夹放在代码同一目录下,就能直接运行游戏啦~

七、写在最后

这个小游戏非常适合Python初学者练手,涵盖了面向对象、Pygame基础、游戏逻辑等核心知识点。

你还可以在此基础上二次开发:

  • 添加游戏音效
  • 修改小鸟/背景皮肤
  • 调整难度(管道速度、间隙大小)
  • 增加游戏动画特效

如果大家需要素材包、代码讲解视频或者想定制其他Python小游戏,欢迎在评论区留言!


关注我不迷路!!!

加我(发源代码和素材包)顺便拉你进少儿编程交流群!!!记得备注来意。

最新文章

随机文章