python写的flappy bird小游戏(最简单版本)有视频链接

谁借莪1个温暖的怀抱¢ 2021-10-18 10:14 331阅读 0赞

一,环境:

  1. 安装了python
  2. 安装了pygame模块
  3. 安装了pycharm

二。游戏分析:

**1. 需要一个游戏界面

  1. 游戏界面的背景图为我们设置的图片
  2. 在游戏界面中添加一个小鸟图片**

    • 点击鼠标或者按键盘小鸟可以向上飞(越来越慢)
    • 不操作小鸟向下掉(越来越快)
    • 小鸟撞到管道死亡,飞出边界死亡、

4. 在游戏界面中添加两个管道图片

  • 两个管道默认向左移动
  • 当管道快移动到左边界时复位,出现新的管道
  • 这时给游戏得分加一

三。视频教程链接:

https://www.bilibili.com/video/av56831869/?p=10

四。图片素材:

链接:https://pan.baidu.com/s/1JIqBxJaY0H7UM9fmfnX_8Q
提取码:p9jf

五。具体代码及其详细功能介绍:

  1. import pygame, sys
  2. "小鸟类"
  3. class Bird:
  4. "初始化方法"
  5. def __init__(self):
  6. self.birdRect = pygame.Rect(250, 300, 45, 45)#调用Rect方法,将bird图片外边加一个矩形框,65,50是矩形所在的指标,45,45是长和宽
  7. self.birdStatus = [pygame.image.load(r"C:\Users\建江\Desktop\python123demo\pythonBase\dist\res\bird1.png"),
  8. pygame.image.load(r"C:\Users\建江\Desktop\python123demo\pythonBase\dist\res\bird2.png"),
  9. pygame.image.load(r"C:\Users\建江\Desktop\python123demo\pythonBase\dist\res\bird3.png")]
  10. #这个表单存储的是bird的状态图
  11. self.statu = 0#定一个状态变量,默认为0 ,也就是表单中第一幅图
  12. self.birdX = 250#bird出场的横坐标
  13. self.birdY = 300#bird出场的纵坐标
  14. self.jump = False#默认bird没有跳跃
  15. self.jumpHeight = 10#向上跳跃一次的初始高度
  16. self.down = 5#默认情况下bird以5的速度向下掉
  17. self.dead = False#默认bird没有死
  18. "移动方法"
  19. def MoveBird(self):
  20. if self.jump:#如果self.jump=True,说明要跳跃,进行下列操作
  21. self.jumpHeight -= 1#为使bird飞到越高就越难飞,所以进行减一
  22. self.birdY -= self.jumpHeight#更新高度,因为向下是正方向,所以要向上就-
  23. else:
  24. self.down += 0.2#实现越向下掉,就掉的越快
  25. self.birdY += self.down#更新高度
  26. self.birdRect[1] = self.birdY#让bird外面的边框所在纵坐标,伴随bird图片一起变化
  27. "管道类"
  28. class Pipline:
  29. "初始化方法"
  30. def __init__(self):
  31. self.wallX = 700#默认将管道放在距离左边缘700像素处
  32. self.pineTop = pygame.image.load(r"C:\Users\建江\Desktop\python123demo\pythonBase\dist\res\pipe2.png")
  33. #导入上管道图像
  34. self.pineBottom = pygame.image.load(r"C:\Users\建江\Desktop\python123demo\pythonBase\dist\res\pipe1.png")
  35. # 导入下管道图像
  36. "移动方法"
  37. def updatePipline(self):
  38. self.wallX -= 5#管道图像以5/time像素的速度向左移动
  39. if self.wallX < 40:#管道距左边缘<40
  40. self.wallX = 700#重置管道,是它出现在初始位置
  41. global score#声明score为全局变量是它可以在类内使用
  42. score += 1#分数加一
  43. "检查bird死亡:当bird的外边缘举行框与管道外边缘矩形框,或者上下边缘接触就死亡"
  44. def checkDead():
  45. topRect = pygame.Rect(pipline.wallX, -100, pipline.pineTop.get_width(), pipline.pineTop.get_height())
  46. #定义上管道矩形框Rect(x,y,width,height)
  47. bottomRect = pygame.Rect(pipline.wallX, 500, pipline.pineBottom.get_width(), pipline.pineBottom.get_height())
  48. # 定义下管道矩形框
  49. if topRect.colliderect(bird.birdRect) or bottomRect.colliderect(bird.birdRect):
  50. #通过topRect.colliderect(bird.birdRect)判断topRect矩形框与birdRect矩形框有没有相接触
  51. bird.dead = True#接触了,bird就死了
  52. return True
  53. if not 0 < bird.birdRect[1] < height:
  54. #如果bird矩形框不再0到屏幕高度height直接,说明鸟已经跑出屏幕了
  55. bird.dead =True#鸟死了
  56. return True#返回True,说明鸟死了
  57. else:
  58. return False#返回Flase,说明鸟没有死
  59. "打印游戏结束后的界面"
  60. def getResult():
  61. final_txt1 = "Game Over!"#输出的文本内容
  62. final_txt2 = "Your final score is :" + str(score)#为实现字段相接,所以要将score转化成str
  63. pygame.font.SysFont("Arial", 70)#设置文本格式,Arial是字体样式,60是字号大小
  64. ft1 = font.render(final_txt1, 1, (222, 45, 2))#对final_txt1进行修饰粉刷,render(目标文本, 是否光滑, 颜色)
  65. pygame.font.SysFont("Arial", 60)#重新置文本格式
  66. ft2 = font.render(final_txt2, 1, (166, 222, 46))#1代表要光滑,(166, 222, 46)是gbk颜色表示
  67. screen.blit(ft1, [screen.get_width() / 2 - ft1.get_width() / 2, 100])
  68. #在屏幕上将文本内容展示出来blit(修饰后的文本, 坐标)
  69. screen.blit(ft2, [screen.get_width() / 2 - ft2.get_width() / 2, 200])
  70. #screen.get_width() / 2 - ft2.get_width() / 2 获取(屏幕宽度/2-文本宽度/2)实现水平居中
  71. pygame.display.update()#对屏幕进行刷新
  72. def creativeMap():#创建背景
  73. screen.blit(backgroud, (0, 0))#添加背景图
  74. "显示管道"
  75. screen.blit(pipline.pineTop, (pipline.wallX, -100))#添加上管道
  76. screen.blit(pipline.pineBottom, (pipline.wallX, 500))#添加下管道
  77. pipline.updatePipline()#调用移动管道的函数,让管道动起来
  78. "显示小鸟"
  79. if bird.dead:#如果小鸟死了
  80. bird.statu = 2#小鸟图片状态为2
  81. elif bird.jump:#如果小鸟跳跃
  82. bird.statu = 1#小鸟图片状态为1
  83. screen.blit(bird.birdStatus[bird.statu], (bird.birdX, bird.birdY))#根据小鸟图片状态显示对应状态的图片
  84. bird.MoveBird()#调用小鸟飞行的函数
  85. "显示分数"
  86. screen.blit(font.render('Score:' + str(score), -1, (255, 255, 255)), (400, 50))
  87. #游戏过程也对分数进行显示
  88. pygame.display.flip()
  89. #当分数变化时,调用flip()函数刷新屏幕,使得分数更新显示
  90. "主程序"
  91. if __name__ == '__main__':
  92. pygame.init()#初始化一个游戏界面
  93. pygame.font.init()#初始化字体
  94. font = pygame.font.SysFont(None, 50)#默认font为一种默认类型,字号为50的字体
  95. size = width, height = 800, 600#设置游戏界面的尺寸
  96. screen = pygame.display.set_mode(size)#以size尺寸来设置游戏界面
  97. clock = pygame.time.Clock()#实例化一个时钟对象,控制图片刷新的速度
  98. color = (255, 255, 255)#白色
  99. bird = Bird()#实例化一个鸟类的对象
  100. pipline = Pipline()#实例化一个管道类的对象
  101. score = 0
  102. while True:#定义一个死循环,小鸟死亡就退出
  103. clock.tick(60)#每秒刷新60
  104. for event in pygame.event.get():#遍历pygame中所有可能的事件
  105. if event.type == pygame.QUIT:#如果事件类型是pygame.QUIT就退出程序
  106. sys.exit()
  107. if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and not bird.dead:
  108. # 如果事件类型是 按键盘 点击鼠标 并且小鸟没有死,执行以下操作
  109. bird.jump = True#跳跃
  110. bird.jumpHeight = 10#跳跃高度为10
  111. bird.down = 5#向下落的速度为5/time
  112. screen.fill(color)#游戏界面的底色默认填充为白色
  113. backgroud = pygame.image.load(r"C:\Users\建江\Desktop\python123demo\pythonBase\dist\res\sky.png")
  114. # 引入背景图片
  115. if checkDead():#调用checkDead()检查有没有死亡,死亡就执行下个操作
  116. getResult()#调用getResult()函数,打印死亡后的界面
  117. else:#没有死亡
  118. creativeMap()#不断根据玩家刷新游戏界面
  119. pygame.quit()#结束程序

效果图:

!](https://img-blog.csdnimg.cn/20190811130719688.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDg0MTMxMg==,size_16,color_FFFFFF,t_70)在这里插入图片描述
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,331人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java入门简单游戏哪些?

    适合新手练习的小游戏有超级玛丽、愤怒的小鸟、飞机大战、五子棋、彩虹雨、聊天室、华容道、坦克大战、扫雷等。还有贪吃蛇,由Java开发出来的一款经典小游戏,java小白入门可以用这

    相关 用Unity开发Flappy Bird

    之前上过unity的选修课,学了点java。因为过一阵开发VR还是要unity基础的,于是~ 上网找了教程,找了素材。Siki的教程。 现总结下(我是菜鸟,错误的地方望大