Flappy Bird小游戏
代码如下:
1 import pygame 2 import sys 3 import random 4 # 素材参考地址:https://www.aigei.com/s?q=flappy+bird&type=2d 5 print("学号后两位为03(2021310143103)") 6 7 class Bird(object): 8 """定义一个鸟类""" 9 def __init__(self): 10 """定义初始化方法""" 11 self.birdRect = pygame.Rect(65, 50, 50, 50) # 鸟的矩形 12 # 定义鸟的3种状态列表 13 bird = pygame.image.load("E:\\大学\\Python\\exercise\\BirdAssets1.png") 14 bird2 = pygame.image.load("E:\\大学\\Python\\exercise\\BirdAssets2.png") 15 bird3 = pygame.image.load("E:\\大学\\Python\\exercise\\BirdAssetsDead.png") 16 self.birdStatus = [bird,bird2,bird3] 17 self.status = 0 # 默认飞行状态 18 self.birdX = 120 # 鸟所在X轴坐标 19 self.birdY = 350 # 鸟所在Y轴坐标,即上下飞行高度 20 self.jump = False # 默认情况小鸟自动降落 21 self.jumpSpeed = 10 # 跳跃高度 22 self.gravity = 5 # 重力 23 self.dead = False # 默认小鸟生命状态为活着 24 25 def birdUpdate(self): 26 if self.jump: 27 # 小鸟跳跃 28 self.jumpSpeed -= 1 # 速度递减,上升越来越慢 29 self.birdY -= self.jumpSpeed # 鸟Y轴坐标减小,小鸟上升 30 else: 31 # 小鸟坠落1 32 self.gravity += 0.01 # 重力递增,下降越来越快 33 self.birdY += self.gravity # 鸟Y轴坐标增加,小鸟下降 34 self.birdRect[1] = self.birdY # 更改Y轴位置 35 36 class Pipeline(object): 37 """定义一个管道类""" 38 def __init__(self): 39 """定义初始化方法""" 40 self.wallx = 400 # 管道所在X轴坐标 41 self.pineUp = pygame.image.load("E:\\大学\\Python\\exercise\\top.png") # 加载上管道图片 42 self.pineDown = pygame.image.load("E:\\大学\\Python\\exercise\\bottom.png") # 加载下管道图片 43 44 def updatePipeline(self): 45 """管道水平移动方法""" 46 self.wallx -= 5 # 管道X轴坐标递减,即管道向左移动 47 # 当管道运行到一定位置,即小鸟飞越管道,分数加1,并且管道重置 48 if self.wallx < -80: 49 global score 50 score += 1 51 self.wallx = 400 52 53 def createMap(screen, background, font): 54 """定义创建地图的方法""" 55 screen.fill((255, 255, 255)) # 填充颜色 56 screen.blit(background, (0, 0)) # 填入到背景 57 58 # 显示管道 59 screen.blit(Pipeline.pineUp, (Pipeline.wallx, -100)) # 上管道坐标位置(X,Y) 60 screen.blit(Pipeline.pineDown, (Pipeline.wallx, 500)) # 下管道坐标位置(X,Y) 61 Pipeline.updatePipeline() # 管道移动 62 63 # 显示小鸟 64 if Bird.dead: # 撞管道状态 65 Bird.status = 2 66 elif Bird.jump: # 起飞状态 67 Bird.status = 1 68 screen.blit(Bird.birdStatus[Bird.status], (Bird.birdX, Bird.birdY)) # 设置小鸟的坐标 69 Bird.birdUpdate() # 鸟移动 70 71 # 显示分数 72 screen.blit(font.render("score: " + str(score), -1, (255, 255, 255)), (230, 20)) # 设置颜色及坐标位置 73 74 pygame.display.update() # 更新显示 75 76 def checkDead(): 77 # 上方管子的矩形位置 78 upRect = pygame.Rect(Pipeline.wallx, -100,Pipeline.pineUp.get_width() - 10, Pipeline.pineUp.get_height()) 79 # 下方管子的矩形位置 80 downRect = pygame.Rect(Pipeline.wallx, 500, Pipeline.pineDown.get_width() - 10, Pipeline.pineDown.get_height()) 81 # 检测小鸟与上下方管子是否碰撞 82 if upRect.colliderect(Bird.birdRect) or downRect.colliderect(Bird.birdRect): 83 Bird.dead = True 84 return True 85 else: 86 return False 87 88 def getResult(): 89 final_text1 = "Game over" 90 final_text2 = "Your final score is: " + str(score) 91 ft1_font = pygame.font.SysFont("Arial", 70) # 设置第一行文字字体 92 ft1_surf = ft1_font.render(final_text1, 1, (242, 3, 36)) # 设置第一行文字的颜色 93 ft2_font = pygame.font.SysFont("Arial", 50) # 设置第二行文字字体 94 ft2_surf = ft2_font.render(final_text2, 1, (253, 177, 6)) # 设置第二行文字颜色 95 # 设置第一行文字显示位置 96 screen.blit(ft1_surf, [screen.get_width() / 2 - ft1_surf.get_width() / 2, 100]) 97 # 设置第二行文字显示位置 98 screen.blit(ft2_surf, [screen.get_width() / 2 - ft2_surf.get_width() / 2, 200]) 99 100 pygame.display.flip() # 更新整个待显示的Surface对象到屏幕上 101 102 if __name__ == "__main__": 103 """主程序""" 104 pygame.init() # 初始化pygame 105 pygame.font.init() # 初始化字体 106 font = pygame.font.SysFont(None, 50) # 设置默认字体和大小 107 size = width, height = 400, 680 # 设置窗口 108 screen = pygame.display.set_mode(size) # 显示窗口 109 clock = pygame.time.Clock() # 设置时钟 110 Pipeline = Pipeline() # 实例化管道类 111 Bird = Bird() # 实例化鸟类 112 score = 0 # 初始化分数 113 while True: 114 clock.tick(60) # 每秒执行60次 115 # 轮询事件 116 for event in pygame.event.get(): 117 if event.type == pygame.QUIT: 118 sys.exit() 119 if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and not Bird.dead: 120 Bird.jump = True # 跳跃 121 Bird.gravity = 5 # 重力 122 Bird.jumpSpeed = 10 # 跳跃速度 123 background = pygame.image.load("E:\\大学\\Python\\exercise\\BirdBackground.png") # 加载背景图片 124 if checkDead(): # 检测小鸟生命状态 125 getResult() # 如果小鸟死亡,游戏结束,显示游戏总分数 126 else: 127 createMap(screen, background, font) # 绘制地图 128 pygame.quit() # 退出
运行结果如下:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异