Flappy Bird游戏python完整源码

通过pygame实现当年风靡一时的flappy bird小游戏。

当前只设定了同样长度的管道,图片和声音文件自行导入。

效果如下:

# -*- coding:utf-8 -*-
"""
通过pygame实现曾风靡一时的flappybird游戏。
小鸟x坐标不变,画布左移实现飞行效果。
通过判断小鸟和管道矩形是否重叠认定碰撞。
清楚矩形4个参数的含义以及所使用图片素材的像素。
声音播放如果位于while循环内且只需要播放一次的,需要在循环外设定状态。
"""
import pygame
import sysclass Bird(object):"""定义小鸟类"""def __init__(self):"""定义初始化方法"""self.birdRect = pygame.Rect(65, 50, 54, 70)  # 小鸟的矩形# 定义小鸟的3种状态self.birdStatus = [pygame.image.load("assets/start.png"),pygame.image.load("assets/fly.png"),pygame.image.load("assets/dead.png")]self.status = 0  # 默认飞行状态self.birdX = 100  # 小鸟所在X轴坐标self.birdY = 300  # 小鸟所在Y轴坐标,即上下飞行的高度self.jump = False  # 默认情况下小鸟自动降落self.jumpSpeed = 8  # 跳跃高度self.gravity = 3  # 重力self.dead = False  # 默认小鸟生命状态为活着def birdUpdate(self):if self.jump:self.jumpSpeed -= 1  # 速度递减,上升越来越慢self.birdY -= self.jumpSpeed  # Y坐标轴减小,小鸟上升else:# 小鸟下坠self.gravity += 1self.birdY += self.gravityself.birdRect[1] = self.birdY  # 更新Y轴位置class Pipeline(object):"""管道类"""def __init__(self):self.wall_x = 300  # 上下管道X坐标self.pineUp = pygame.image.load("assets/top.png")self.pineDown = pygame.image.load("assets/bottom.png")def updatePipeline(self):self.wall_x -= 3  # 每一帧x坐标-3,即向左移动3像素# 当管道x坐标移动到-10位置时分数+1,并将其重置为500if self.wall_x < -10:global scorescore += 1self.wall_x = 500def createMap():screen.fill((255, 255, 255))screen.blit(background, (0, 0))# 显示管道screen.blit(Pipeline.pineUp, (Pipeline.wall_x, 0))screen.blit(Pipeline.pineDown, (Pipeline.wall_x, 500))Pipeline.updatePipeline()# 显示小鸟if Bird.dead:Bird.status = 2elif Bird.jump:Bird.status = 1screen.blit(Bird.birdStatus[Bird.status], (Bird.birdX, Bird.birdY))# 小鸟移动Bird.birdUpdate()# 显示分数screen.blit(font.render('Score:' + str(score), 1, (255, 255, 255)), (150, 100))# 更新显示pygame.display.update()def checkDead():# 上方管道的矩形位置,Rect的4个参数分别为x坐标、y坐标,管道宽度、管道高度upRect = pygame.Rect(Pipeline.wall_x, 0, Pipeline.pineUp.get_width(), Pipeline.pineUp.get_height())# 下方管道的矩形位置downRect = pygame.Rect(Pipeline.wall_x, 700-(Pipeline.pineDown.get_height()),Pipeline.pineDown.get_width(), Pipeline.pineDown.get_height())# 检测小鸟是否碰撞即小鸟矩形和管道矩形是否重叠if upRect.colliderect(Bird.birdRect) or downRect.colliderect(Bird.birdRect):Bird.dead = True# 检测小鸟是否飞出上下边界if not 0 < Bird.birdRect[1] < height:Bird.dead = Truereturn Trueelse:return Falsedef getResult():  # 设置游戏结束时显示内容gameover_text = 'GAME OVER'score_text = 'Your final score is:' + str(score)ft1_surf = font.render(gameover_text, 1, (250, 5, 35))ft2_surf = font.render(score_text, 1, (250, 180, 6))screen.blit(ft1_surf, [screen.get_width()/2 - ft1_surf.get_width()/2, 150])screen.blit(ft2_surf, [screen.get_width()/2 - ft2_surf.get_width()/2, 200])pygame.display.flip()if __name__ == '__main__':pygame.init()pygame.font.init()pygame.mixer.init()pygame.mixer.music.load('sound/fly.ogg')  # 载入音效pygame.mixer.music.load('sound/crashed.ogg')fly_sound = pygame.mixer.Sound('sound/fly.ogg')crashed_sound = pygame.mixer.Sound('sound/crashed.ogg')font = pygame.font.SysFont("None", 50)size = width, height = 450, 700screen = pygame.display.set_mode(size)clock = pygame.time.Clock()Pipeline = Pipeline()Bird = Bird()score = 0crashed_sound_play = Truewhile True:clock.tick(60)for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()sys.exit()if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and not Bird.dead:Bird.jump = TrueBird.gravity = 5Bird.jumpSpeed = 10fly_sound.play()background = pygame.image.load('assets/background.png')if checkDead():getResult()fly_sound.stop()if crashed_sound_play:  # 通过此方法使得坠落音效播放一次,否则会一直播放crashed_sound.play()crashed_sound_play = Falseelse:createMap()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【 .NET Core 3.0 】框架之九 || 依赖注入 与 IoC

本文有配套视频&#xff1a;https://www.bilibili.com/video/av58096866/?p5前言1、重要&#xff1a;如果你实现了解耦&#xff0c;也就是 api 层只引用了 IService 和 IRepository 的话&#xff0c;那每次修改 service 层&#xff0c;都需要清理解决方案&#xff0c;重新编译…

10月数据库排行:Microsoft SQL Server分数增加最多

DB-Engines 数据库流行度排行榜 10 月更新已发布&#xff0c;排名前二十如下&#xff1a;这期的数据比较有意思&#xff0c;到了这个月&#xff0c;Microsoft SQL Server 马上扭转局势&#xff0c;成了分数增长最多的一个&#xff0c;与上个月相比其增加了 9.66 分&#xff0c;…

VS Code 1.39 发布!Web 版 VS Code 是否离我们越来越近了?(文末彩蛋)

今天&#xff08;北京时间 2019 年 10 月 10 日&#xff09;&#xff0c;微软发布了 Visual Studio Code 1.39 版本。此版本主要更新的内容包括&#xff1a;Source Control tree view - 可以通过列表或者树状图两种方式来展示被改变的文件。Toggle region folding keyboard sho…

二叉树分析(两点最大距离)

转载自&#xff1a;http://blog.csdn.net/lalor/article/details/7626678 http://blog.csdn.net/lalor/article/details/7618120 把二叉树看成一个图&#xff0c;父子节点之间的连线看成是双向的&#xff0c;我们姑且定义"距离"为两节点之间边的个数。写…

IT从业的迷思与破解之道(更新)

我只是单纯做技术的程序员&#xff0c;什么靠微信广告攒钱这些&#xff0c;跟我没有半毛钱关系&#xff0c;初衷很简单&#xff0c;只重视正三观的正确技术知识分享在这到处都是线上培训&#xff0c;付费知识的社群里&#xff0c;随便搜个词都有您想要的内容哪轮到我们。技术的…

graphcut 用于最优缝合先寻找_Image Stitching

Graphcut 求解最佳缝合线&#xff1a; 主要参照硕士学位论文《基于不同视点样图的图像修复》 Graphcut 主要参照&#xff1a; http://blog.csdn.net/zouxy09/article/details/8532111 Graph cuts是一种十分有用和流行的能量优化算法&#xff0c;在计算机视觉领域普遍应用于…

.netcore 开发的 iNeuOS 物联网平台部署在 Ubuntu 操作系统,无缝跨平台

1. 概述参见前两篇文章&#xff1a;《iNeuOS完全使用.netcore开发&#xff0c;主要为企业、集成商打造从网关、边缘应用、云端建设的物联网/工业互联网平台产品级解决方案。面向应用场景&#xff1a;&#xff08;1&#xff09;嵌入式硬件网关的开发和部署&#xff0c;形成自己…

按照前序遍历和中序遍历构建二叉树

转载自&#xff1a;http://blog.csdn.net/sbitswc/article/details/26433051 Given preorder and inorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree. There is an example._______7______/ …

刷新:重新发现.NET与未来

是新朋友吗&#xff1f;记得先点蓝字关注我哦&#xff5e;微软在比尔盖茨手中创立并崛起, 成为PC互联网时代的霸主&#xff0c;很多70&#xff0c;80后都有MVP Edi Wang 的体验<“ 当时的微软对我来说就是神的存在。因为我认识电脑到使用电脑的一切几乎都离不开这家伟大的公…

合并区间

题目描述 给出一个区间的集合&#xff0c;请合并所有重叠的区间。 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2: 输入: [[1,4],[4,5]] 输出: [[1,5]] 解释: 区间 [1,4] 和 [4,5]…

程序员修神之路--设计一套RPC框架并非易事

菜菜哥&#xff0c;我最近终于把Socket通信调通了这么底层的东西你现在都会了&#xff0c;恭喜你离涨薪又进一步呀http协议不也是利用的Socket吗可以这么说&#xff0c;http协议是基于TCP协议的&#xff0c;底层的数据传输可以说是利用的socket既然Socket通信会了&#xff0c;那…

GPU Shader 编程基础

转载自&#xff1a;http://www.cnblogs.com/youthlion/archive/2012/12/07/2807919.html 几个基本概念&#xff1a; Vertex buffer&#xff1a;存储顶点的数组。当构成模型的所有顶点都放进vertex buffer后&#xff0c;就可以把vertex buffer送进GPU&#xff0c;然后GPU就可…

Azure pipeline 配置根据条件执行脚本

Azure pipeline 配置根据条件执行脚本Intro我的应用通过 azure pipeline 来做持续集成&#xff0c;之前已经介绍了根据不同分支去打包不同的package&#xff0c;具体的就不再这里详细介绍了&#xff0c;可以参考 Solution来看一下修改之后的 azure-pipelines.yaml 示例配置吧&a…

C# 8 新特性 - 可空引用类型

Nullable Reference Type.在写C#代码的时候&#xff0c;你可能经常会遇到这个错误&#xff1a; 但如果想避免NullReferenceException的发生&#xff0c;确实需要做很多麻烦的工作。 可空引用类型 Null Reference Type 所以&#xff0c;C# 8的可空引用类型就出现了。 C# 8可以让…

统计学习笔记(1) 监督学习概论(1)

原作品&#xff1a;The Elements of Statistical Learning Data Mining, Inference, and Prediction, Second Edition, by Trevor Hastie, Robert Tibshirani and Jerome Friedman An Introduction to Statistical Learning. by Gareth JamesDaniela WittenTrevor Hastie andR…

.NET Core 3.0之深入源码理解ObjectPool(一)

写在前面对象池是一种比较常用的提高系统性能的软件设计模式&#xff0c;它维护了一系列相关对象列表的容器对象&#xff0c;这些对象可以随时重复使用&#xff0c;对象池节省了频繁创建对象的开销。它使用取用/归还的操作模式&#xff0c;并重复执行这些操作。如下图所示&…

Deep Boltzmann Machines

转载自&#xff1a;http://blog.csdn.net/win_in_action/article/details/25333671 http://blog.csdn.net/zouxy09/article/details/8775518 深度神经网络&#xff08;Deep neural network&#xff09; 深度学习的概念源于人工神经网络的研究。含多隐层的多层感知器就是一种…

.NET斗鱼直播弹幕客户端(下)

前言在上篇文章中&#xff0c;我们提到了如何使用 .NET连接斗鱼TV直播弹幕的基本操作。然而想要做得好&#xff0c;做得容易扩展&#xff0c;就需要做进一步的代码整理。本文将涉及以下内容&#xff1a;介绍如何使用 ReactiveExtensions&#xff08; Rx&#xff09;&#xff0c…

【 .NET Core 3.0 】框架之十 || AOP 切面思想

本文有配套视频&#xff1a;https://www.bilibili.com/video/av58096866/?p6前言上回《【 .NET Core3.0 】框架之九 || 依赖注入IoC学习 AOP界面编程初探》咱们说到了依赖注入Autofac的使用&#xff0c;不知道大家对IoC的使用是怎样的感觉&#xff0c;我个人表示还是比较可行…

[ASP.NET Core 3框架揭秘] 跨平台开发体验: Docker

对于一个 .NET Core开发人员&#xff0c;你可能没有使用过Docker&#xff0c;但是你不可能没有听说过Docker。Docker是Github上最受欢迎的开源项目之一&#xff0c;它号称要成为所有云应用的基石&#xff0c;并把互联网升级到下一代。Docker是dotCloud公司开源的一款产品&#…