pygame 写的 flappy bird

作者用Python和Pygame库重制了热门游戏Flappy Bird,不仅巩固了Python知识,还掌握了面向对象编程及状态机的应用。通过四天的努力,实现了良好的游戏还原度并进行了代码重构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上周工作比较清闲,断断续续3,4天左右的时间,用 pygame 写了个 flappy bird.记录下来做个纪念。

flappy bird 大约2年前曾经火了一阵,让一个越南(好像是)的独立游戏开发者赚得瓶满钵满,名利双丰收。那段日子周围没有玩过flappy bird 的人都落了伍,app store 上类似的游戏也一抓一大把。自己现在翻版这个游戏,是为了巩固 python 知识,熟悉和使用python 面向对象的特性,了解 pygame库 。就结果来看,我对自己做的这个小东西还比较满意。还原度较好,游戏核心逻辑实现的比较清晰。

以前写一些小东西,经常一上来就考虑代码结构,通用模块,架构封装。考虑了很多,凭空建了很多的类,耗费了很多心血,几天后热乎劲过去,发现自己考虑了半天的架构也并不很合理,然后就版图而废了。

这次我本着尽快出东西的原则,没有做太多的架构上的考虑,刚开始主要以实现逻辑为目标,中间遇到问题也尽量简化处理,第3天基本上完成了主要功能。在完成的基础上,我明显感觉,在增加一些内容的时候,由于游戏主循环里面需要分类各种情形,代码的“坏味道”越来越严重。于是,第4天一整个白天,我对当时现有的代码做了重构, 用状态机的形式 ,拆分了 游戏 主循环里的 代码逻辑。拆分的结果很不错 ,最终游戏逻辑 完全保留,并且代码也变得更加清晰。 

这算是一个比较成功的案例。总结一下经验,还是应该上来 大概做一些 框架级的设计,之后就开始干,有问题先临时解决,或者规避开。等原型基本出来了以后,再考虑重构。这样可以维持自己做事情的热度,帮助我把这件事情彻底做完。

代码整体的结构我是比较满意的,自我感觉没有把代码写烂。在一些细节上,一些已知的不足。比如我打算自己封装一个事件队列,实现一套事件监听机制,用“监听者” 模式封装一个事件分发处理机制。但是由于这套代码写起来一时半会看不到效果,就没有写,而是采用各个地方 生硬调用的方式实现了游戏逻辑。但是事后我再回过头来看 pygame库,才发现 已经有了 现成的 事件 和事件分发机制;再比如有些具体的内容,有比较明显的赶工痕迹,为了尽快实现功能,没有把代码写得尽善尽美;还有一些硬编码坐标,没有去做多分辨率处理 ;还有一些因为对 python 语言本身的不熟悉,自己写了一些并不优雅的代码等等。


总结几个关键词吧,将来如果看到这篇博文,自己还能对当时用到的技术有点印象:

1. 状态机:重构了游戏代码,主循环使用了状态机分接不同状态,update 游戏逻辑 , 使代码变得清晰利于维护

2. OBB 碰撞检测:AABB 碰撞检测 无法 达到需求,参考了  OBB 碰撞检测的原理,实现了游戏的碰撞检测

3. cx_Freeze:python 代码打包 exe ,使用了 cx_Freeze 这个库,这个库非常好用,更难得的是支持 python3


遇到的问题有:

1. 没有仔细研究 pygame 如何操作 surface 的 alpha 透明度

2. cx_Freeze 打包出来的 exe, 在遇到调用 pygame.mixer.music 的 load() 函数时,会报错。没有仔细查原因。

3. 对 python 语言本身的一些特性不熟悉,一些特性的实现可能并不符合 python 的标准用法。


总的来说,我对这套代码的质量还算满意,对这个游戏核心玩法的还原度也比较认可。写在这里,记录我第一次用 python 写了个行数较多的,面向对象的程序。

可惜用 pygame 写出来的东西没法移植到手机,每每想到这一点,就让我觉得这东西实在没啥前途。。我对 python 的理解 可能不够,但是我印象里 python 也是一个解释执行的语言,也可以和 c++ 相互调用,为啥不能在手机上 搞个python 解释器来运行 python 程序 ? 如果 python 解释器是 c++ 写的,python 不能像  lua  等脚本语言一样,内嵌到 手机 开发的 app 里?如果 python 程序可以移植到手机上执行的话,  pygame 基于 SDL ,理论上  SDL 也是基于 OpenGL 的,那么理论上 pygame 写出来的游戏,应该也能移植到 手机上 才对。。

所以说。。我对 python 的理解还是不足,暂时没法从知识上解答上面的几个问题。下个目标还是专心本职工作,学习 ios android 原生开发,更深入的去学习平台跨越性更好的 游戏引擎,争取多写一些 在手机上跑的,完成度最少达到这次写的 flappy bird 的程度的 东西吧。

主要参考的文章地址是:

http://simple-is-better.com/news/361

全部代码以及打包出来的 exe 都上传在这里,给N年后回头看的自己留个念想,也提供给比我更新的手, 想了解 pygame 的人做个参考

http://download.youkuaiyun.com/detail/korekara88730/9416635

在通信感知一体化(ISAC)系统的设计中,实现通信和感知功能之间的性能折衷是实现系统高效运作的关键。根据《通信感知一体化:信息理论极限与性能边界探索》一书的内容,可以通过以下几个方面来实现这种折衷: 参考资源链接:[通信感知一体化:信息理论极限与性能边界探索](https://wenku.youkuaiyun.com/doc/8662tj8cpi?spm=1055.2569.3001.10343) 首先,需明确ISAC系统中的通信和感知任务在理论上存在的性能边界。这涉及理解信息理论极限,比如香农定理和通信感知性能折衷(Communication-Sensing Performance Tradeoff)的概念,从而为系统设计提供指导。 其次,创新的信号处理技术是实现性能折衷的关键。可以通过多输入多输出(MIMO)技术、波束成形和空时编码等方法来提高信号的传输效率和感知精度,同时考虑如何在不同的通信和感知任务之间合理分配频谱资源。 再次,编码方案的选择也十分关键。在ISAC系统中,设计能够同时满足通信和感知需求的编码策略,如采用联合通信感知编码(Joint Communication-Sensing Coding, JCSC),可以在保证通信质量的同时,提升环境感知的准确性。 此外,资源分配策略同样影响性能折衷。系统设计者需要基于当前网络状况和任务优先级,动态地调整资源分配,如功率、时间和频率资源,确保通信和感知任务之间获得最佳的性能平衡。 最后,考虑应用场景是实际部署ISAC系统时不可或缺的一步。在物联网、自动驾驶和智能城市等不同应用中,性能折衷的目标和方法可能有所不同。因此,根据具体应用场景来设计和优化ISAC系统,将有助于实现最佳的性能折衷。 综上所述,通过理论研究与实际应用相结合,可以实现通信和感知功能之间的有效性能折衷,进而优化ISAC系统的整体性能。《通信感知一体化:信息理论极限与性能边界探索》一书详细地探讨了这些问题,并提供了理论依据和实用指导,对于从事无线通信和信息科学领域的研究人员和工程师来说,这是一份宝贵的参考资料。 参考资源链接:[通信感知一体化:信息理论极限与性能边界探索](https://wenku.youkuaiyun.com/doc/8662tj8cpi?spm=1055.2569.3001.10343)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值