您的位置:首页 >聚焦 >

隔离太无聊!不如用Python实现愤怒的小鸟,看看能否通关!

2022-04-14 06:08:44    来源:程序员客栈

大家好,我是菜鸟哥!

最近上海的疫情还是很猛,每天新增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欢迎跟小助手联系。

最后希望这次上海的疫情尽快结束,一切都会好起来的!上海加油!

关键词: 如下图所示 转动惯量 愤怒的小鸟

相关阅读