pygame 写的 flappy bird

上周工作比较清闲,断断续续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.csdn.net/detail/korekara88730/9416635

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值