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

共 2757字,需浏览 6分钟

 ·

2022-04-14 02:48


大家好,我是菜鸟哥!


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


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





推荐阅读:

入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径


干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影


趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!


AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影


小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!


年度爆款文案

点阅读原文,看原创200个趣味案例!

浏览 28
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐