首页 > 其他分享 >flappy bird

flappy bird

时间:2023-12-28 23:44:45浏览次数:29  
标签:Pipeline flappy self bird pygame screen font Bird

import pygame import sys import random # 素材参考地址:https://www.aigei.com/s?q=flappy+bird&type=2d
class Bird(object):     """定义一个鸟类"""     def __init__(self):         """定义初始化方法"""         self.birdRect = pygame.Rect(65, 50, 50, 50)    # 鸟的矩形         # 定义鸟的3种状态列表         self.birdStatus = [pygame.image.load("1702429995222.jpg"),                            pygame.image.load("1702430680509(1).jpg"),                            pygame.image.load("1702430840445(1).jpg")]         self.status = 0   # 默认飞行状态         self.birdX = 60   # 鸟所在X轴坐标         self.birdY = 175    # 鸟所在Y轴坐标,即上下飞行高度         self.jump = False      # 默认情况小鸟自动降落         self.jumpSpeed = 5   # 跳跃高度         self.gravity = 5    # 重力         self.dead = False     # 默认小鸟生命状态为活着
    def birdUpdate(self):         if self.jump:             # 小鸟跳跃             self.jumpSpeed -= 1    # 速度递减,上升越来越慢             self.birdY -= self.jumpSpeed    # 鸟Y轴坐标减小,小鸟上升         else:             # 小鸟坠落             self.gravity += 0.2     # 重力递增,下降越来越快             self.birdY += self.gravity      # 鸟Y轴坐标增加,小鸟下降         self.birdRect[1] = self.birdY    # 更改Y轴位置
class Pipeline(object):     """定义一个管道类"""     def __init__(self):         """定义初始化方法"""         self.wallx = 400      # 管道所在X轴坐标         self.pineUp = pygame.image.load("1702430471558(1).jpg")     # 加载上管道图片         self.pineDown = pygame.image.load("1702430471558(1).jpg")     # 加载下管道图片
    def updatePipeline(self):         """管道水平移动方法"""         self.wallx -= 5      # 管道X轴坐标递减,即管道向左移动         # 当管道运行到一定位置,即小鸟飞越管道,分数加1,并且管道重置         if self.wallx < -80:             global score             score += 1             self.wallx = 400
def createMap(screen, background, font):     """定义创建地图的方法"""     screen.fill((255, 255, 255))     # 填充颜色     screen.blit(background, (0, 0))    # 填入到背景
    # 显示管道     screen.blit(Pipeline.pineUp, (Pipeline.wallx, -100))     # 上管道坐标位置(X,Y)     screen.blit(Pipeline.pineDown, (Pipeline.wallx, 300))    # 下管道坐标位置(X,Y)     Pipeline.updatePipeline()      # 管道移动
    # 显示小鸟     if Bird.dead:     # 撞管道状态         Bird.status = 2     elif Bird.jump:    # 起飞状态         Bird.status = 1     screen.blit(Bird.birdStatus[Bird.status], (Bird.birdX, Bird.birdY))    # 设置小鸟的坐标     Bird.birdUpdate()     # 鸟移动
    # 显示分数     screen.blit(font.render("score: " + str(score), -1, (255, 255, 255)), (230, 20))    # 设置颜色及坐标位置
    pygame.display.update()    # 更新显示
def checkDead():     # 上方管子的矩形位置     upRect = pygame.Rect(Pipeline.wallx, -100,Pipeline.pineUp.get_width() - 50, Pipeline.pineUp.get_height())     # 下方管子的矩形位置     downRect = pygame.Rect(Pipeline.wallx, 300, Pipeline.pineDown.get_width() - 50, Pipeline.pineDown.get_height())     # 检测小鸟与上下方管子是否碰撞     if upRect.colliderect(Bird.birdRect) or downRect.colliderect(Bird.birdRect):         Bird.dead = True         return True     else:         return False
def getResult():     final_text1 = "Game over"     final_text2 = "Your final score is: " + str(score)     ft1_font = pygame.font.SysFont("Arial", 70)      # 设置第一行文字字体     ft1_surf = ft1_font.render(final_text1, 1, (242, 3, 36))     # 设置第一行文字的颜色     ft2_font = pygame.font.SysFont("Arial", 50)     # 设置第二行文字字体     ft2_surf = ft2_font.render(final_text2, 1, (253, 177, 6))    # 设置第二行文字颜色     # 设置第一行文字显示位置     screen.blit(ft1_surf, [screen.get_width() / 2 - ft1_surf.get_width() / 2, 100])     # 设置第二行文字显示位置     screen.blit(ft2_surf, [screen.get_width() / 2 - ft2_surf.get_width() / 2, 200])
    pygame.display.flip()    # 更新整个待显示的Surface对象到屏幕上
if __name__ == "__main__":     """主程序"""     pygame.init()     # 初始化pygame     pygame.font.init()    # 初始化字体     font = pygame.font.SysFont(None, 50)    # 设置默认字体和大小     size = width, height = 400,400   # 设置窗口     screen = pygame.display.set_mode(size)    # 显示窗口     clock = pygame.time.Clock()    # 设置时钟     Pipeline = Pipeline()     # 实例化管道类     Bird = Bird()    # 实例化鸟类     score = 0    # 初始化分数     while True:         clock.tick(60)     # 每秒执行60次         # 轮询事件         for event in pygame.event.get():             if event.type == pygame.QUIT:                 sys.exit()             if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and not Bird.dead:                 Bird.jump = True     # 跳跃                 Bird.gravity = 5    # 重力                 Bird.jumpSpeed = 10     # 跳跃速度         background = pygame.image.load("1702430971335.png")     # 加载背景图片         if checkDead():   # 检测小鸟生命状态             getResult()     # 如果小鸟死亡,游戏结束,显示游戏总分数         else:             createMap(screen, background, font)    # 绘制地图     pygame.quit()    # 退出


标签:Pipeline,flappy,self,bird,pygame,screen,font,Bird
From: https://www.cnblogs.com/xizhao-xizhao/p/17933835.html

相关文章

  • flybird
    importpygameimportsysimportrandomimportnumpyasnpclassBird(object):"""定义一个鸟类"""def__init__(self):"""定义初始化方法"""self.birdRect=pygame.Rect(65,50,50,50)#鸟的矩形......
  • bird
    importpygameimportsysimportrandomclassBird(object):def__init__(self):self.birdRect=pygame.Rect(65,50,50,50)self.birdStatus=[pygame.image.load("1.png"),pygame.image.load("2.p......
  • 开发Flappy Bird游戏
    #-*-coding:utf-8-*-"""CreatedonSatDec2316:26:062023@author:86135"""importpygameimportsysimportrandomclassBird(object):"""定义一个鸟类"""def__init__(self):......
  • FirebirdSql.Data.FirebirdClient.FbDataAdapter的bug吗
    在连接Firebird4数据库时,使用以下: FbDataAdapterda=newFbDataAdapter(sql,this.cnstring); DataTabledt=newDataTable(); da.Fill(dt); returndt;在一直的相像中,FbDataAdapter在接收到连接字符串时,会自动创建一个Connection并Open使用,用完再Close,即不需......
  • flappy bird
    importpygameimportsysimportrandom#素材参考地址:https://www.aigei.com/s?q=flappy+bird&type=2dclassBird(object):"""定义一个鸟类"""def__init__(self):"""定义初始化方法"""self.birdRect......
  • python——小游戏(ball,bird)
      ball #-*-coding:utf-8-*-"""CreatedonWedDec1309:19:382023@author:kabuqinuo"""importsys#导入sys模块importpygame#导入pygame模块pygame.init()#初始化pygamesize=width,height=640,480#设置窗......
  • NetBird 开源网络管理平台 部署安装
    NetBird简介NetBird是一个建立在WireGuard之上的开源网络管理平台,它允许计算机、设备和服务器通过快速加密隧道直接连接,无需配置或中央V*N服务器。它使专用网络变得安全,并创建了一个专用网络,在没有手动配置和专家的情况下应用安全实践。NetBird网络普遍适用于云、本地、边缘和容器......
  • 自建Netbird中续组网
    介绍引用:https://docs.netbird.io/selfhosted/selfhosted-quickstartNetBird开源,可以在服务器上自托管。它依赖于由NetBirdAuthorsManagementService、ManagementUIDashboard、SignalService、第三方开源STUN/TURN服务Coturn和身份提供程序开发的组件。实验环......
  • 解密Prompt系列15. LLM Agent之数据库应用设计:DIN & C3 & SQL-Palm & BIRD
    上一章我们主要讲搜索引擎和LLM的应用设计,这一章我们来唠唠大模型和DB数据库之间的交互方案。有很多数据平台已经接入,可以先去玩玩再来看下面的实现方案,推荐sqltranslate:简单,文本到SQL,SQL到文本双向翻译,新手体验ai2sql:功能更全,包括语法检查,格式化等chat2query:可处理复杂query......
  • 关闭Thunderbird的自动换行
    参考https://blog.csdn.net/cuma2369/article/details/107667731https://support.mozilla.org/en-US/questions/1307935点击设置->配置编辑器:然后搜索mailnews.wraplength,把值修改为0:......