隔离太无聊!不如用Python实现愤怒的小鸟,看看能否通关!
大家好,我是菜鸟哥!
最近上海的疫情还是很猛,每天新增1万多,很多同事,同学都是居家办公,居家隔离。这波疫情时间已经有一段时间了,大家都窝在家里也不好受。房子就那么大,不能出去,蔬菜也不多,亲戚在上海,每天凌晨5点多抢菜,真心不易。为了打发时间,只能煲煲剧,或者打打游戏。
说到打游戏,菜鸟哥以前写过好几个Python玩游戏的文章:
牛逼,两百行Python代码带你打造一款《天天酷跑》游戏!
太好玩了!用Python写个弹球游戏2.0
太好玩了,我用Python写了个火影忍者版的连连看
手把手教你!100行代码,用Python做一个“消灭病毒”的小游戏
既然是学Python,今天我们来玩一个好玩的东西。发现一款用python来打造的《愤怒的小鸟》游戏,下载来玩,非常的有趣好玩,不知不觉就玩了好久。
今天就和大家一起来分享这个游戏源码,力争让大家看的开心,玩的舒心。
由于程序代码量过于庞大,对于程序的细节内容,菜鸟哥会着重点来同大家进行分析。菜鸟哥希望能从游戏本身的角度出发,来让大家更好的体验游戏,首先,我们来看一下游戏的效果。
视频来袭
接下来,我们首先来展示各个py文件下都包含哪些内容。
由上面的程序组织架构图可以看出,游戏包含了四个py文件内容,分别对应着不同的功能。接下来我们针对四个py文件进行简要的分析。
在程序中,我们使用到以前菜鸟哥未曾提到的库——pymunk。
pymunk是一个2D的物理引擎, 它实际是封装了 c语言写的2D物理引擎Chipmunk,可以实现碰撞,旋转等物理运动。
pymunk下具有四个常用的类:
pymunk.Body:Body具有物体的物理属性(质量、坐标、旋转角度、速度等),但是它没有的形状。
碰撞形状 (pymunk.Circle, pymunk.Segment and pymunk.Poly):通过将形状附加到实体,可以定义一个实体的形状。
约束/关节 (pymunk.constraint.PinJoint, pymunk.constraint.SimpleMotor):在两个实体之间,可以用关节以约束它们的行为。比如在两个实体间保持一个固定的距离。
空间 (pymunk.Space): 空间是pymunk中基本的模拟单元。用来添加实体,形状和关节。在Space下,pymunk可以控制所有的实体,形状和关节,以及他们直接的相互作用。
polygon.py
在polygon.py文件中,包含Polygon类,主要是用来画出界面当中的柱子以及横梁。
上图中的draw_poly函数,35-36行利用to_pygame函数将pymunk下的坐标转换为pygame下的坐标;
39-48行程序中,如果element是“横梁”,那么就根据poly对象的坐标,在界面上画出横梁,同理,如果element是“柱子”的话,则在界面上对应的画出柱子。实现效果如下图所示。
characters.py
characters.py文件下,主要包含了小猪和小鸟两个类,我们以“小猪”类为例。
在小猪类中,31行计算小猪的转动惯量,用以计算小猪在界面上滚动的状态;
34-38行程序,设置小猪为“圆形”,并设置了小猪的弹性,以及摩擦指数,碰撞类型等信息,最后将小猪添加倒space空间中。
正是计算并设置小猪的转动惯量以及弹性等信息,才能在游戏中让小猪体现出滚动以及具有弹性的效果,如下图所示。
level.py
该文件中,包含的内容为设置关卡信息,包括有多少只小鸟和小猪,以及多少根柱子或者是横梁。
上图程序是第一关的设置信息,包含了两只小猪以及四只小鸟,并添加了四根柱子以及两根横梁。如下图所示:
如果小伙伴们觉得小鸟的数量不够多,可以修改上图代码的77行,修改第一关的小鸟的数量。
main.py
main.py是游戏的主入口文件,包含了游戏逻辑的设计,以及小鸟、小猪以及柱子之间的碰撞检测判断。想要完全理解main.py的程序内容具有一定的难度。菜鸟哥简要的介绍一下各个函数的主要作用,方便大家理解程序。
上图程序中,菜鸟哥为每个函数都做了解释,并在程序中给出了注释说明,有兴趣的同学可以研究一下,通过趣味学习Python是最好的学习方式,在趣味中学习,趣味中成长,这样才能形成自驱力,不断的成长。
如何获取源码:
最近在家无聊,做了很多机器人程序。现在把一个Go编程小号弄成了机器人,很多功能都在开发,大家直接在下面的公众号骚扰。
输入:小鸟源码,即可获取源码
输入:小鸟软件,即可获取软件
另外还开发了天气查询和955公司的名单draft版本,其他的功能在开发中,算是自娱自乐吧。后面有机会完整的介绍一下这个机器人的技术栈原理:主要是微信公众号后台+Django+Python+Ngnix+爬虫
欢迎大家去骚扰这个机器人,如果测到有bug欢迎跟小助手联系。
最后希望这次上海的疫情尽快结束,一切都会好起来的!上海加油!
相关阅读
-
世界热推荐:今晚7:00直播丨下一个突破...
今晚19:00,Cocos视频号直播马上点击【预约】啦↓↓↓在运营了三年... -
NFT周刊|Magic Eden宣布支持Polygon网...
Block-986在NFT这样的市场,每周都会有相当多项目起起伏伏。在过去... -
环球今亮点!头条观察 | DeFi的兴衰与...
在比特币得到机构关注之后,许多财务专家预测世界将因为加密货币的... -
重新审视合作,体育Crypto的可靠关系才能双赢
Block-987即使在体育Crypto领域,人们的目光仍然集中在FTX上。随着... -
简讯:前端单元测试,更进一步
前端测试@2022如果从2014年Jest的第一个版本发布开始计算,前端开发... -
焦点热讯:刘强东这波操作秀
近日,刘强东发布京东全员信,信中提到:自2023年1月1日起,逐步为...