大家好,我是菜鸟哥!

最近上海的疫情还是很猛,每天新增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行代码做了一个语音壁纸切换器天天看小姐姐!|

年度爆款文案

  • 1).卧槽!Pdf转Word用Python轻松搞定!

  • 2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃

  • 3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密

  • 4).80行代码!用Python做一个哆来A梦分身

  • 5).你必须掌握的20个python代码,短小精悍,用处无穷

  • 6).30个Python奇淫技巧集

  • 7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货

  • 8).再见Python!我要学Go了!2500字深度分析!

  • 9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片

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

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

  1. 隔离太无聊?每天一个数据科学项目,数据集都准备好了!

    来源:大数据文摘 本文约2300字,建议阅读5分钟 本文提供了14个可以利用业余时间完成的数据科学项目清单. 首先,我想向所有的护士,医生,超市员工,公共管理人员以及其他冒着生命危险为我们服务的人致敬 ...

  2. 宅在家太无聊了,我用Python做了一个能作弊的抽奖程序

    今年的春节真的是魔幻像一场电影,宅在家里好多天了,有的人在客厅围绕茶几已经走了1万步了,有的人没事在客厅放几个玩具,扔圈圈玩.太无聊了,Python好久不写了,赶紧操练起来,反正闲着也是无聊.年前公司 ...

  3. 64岁Python之父:退休生活太无聊,我要加入微软,将开源进行到底

    2020-11-13 15:50:45 今日凌晨,64岁的 Python 语言的创建者 Guido van Rossum 发推表示,退休生活太无聊,决定入职微软. 吉多·范罗苏姆(Guido van ...

  4. 不愧是你!Python 之父退休太无聊,进微软搞开源!

    今天,Python 之父 Guido van Rossum 在 Twitter 上正式宣布,退休太无聊,如今加入了微软开发者部门. Guido van Rossum 去年宣布退出 Python 核心决 ...

  5. python做一个网页多少钱_网站建设平台_ 网站建设多少钱_ _做一个企业网站需要多少钱_64岁的Python之父表示退休后太无聊 正式加入微软...

    按照TIOBE发布的2020年11月编程语言排行版,Python首次高出了Java成为全球第二受接待的编程语言.近些年,跟着人工智能的飞速成长,Python已成为最受接待的编程语言之一.作为Pytho ...

  6. Python 之父 Guido van Rossum 称退休太无聊,正式加入微软搞开源!

    Python 之父 Guido van Rossum 称退休太无聊,正式加入微软搞开源! 图片来自 Oracle 博客 今天,Python 之父 Guido van Rossum 在 Twitter ...

  7. 64岁Python之父加盟微软!直言:“退休太无聊了”

    作者:圆子 编辑:刘静 来源:图灵TOPIA 王者归来了! 今天,Python 之父 Guido van Rossum 在 Twitter 上正式宣布:退休太无聊,决定加入了微软开发者部门! 一.为何 ...

  8. python从入门到放弃系列恶搞短片-太惨!学Python方法用错,直接从入门到放弃!...

    原标题:太惨!学Python方法用错,直接从入门到放弃! 从你开始学习编程的那一刻起,就注定了以后所要走的路-从编程学习者开始,依次经历实习生.程序员.软件工程师.架构师.CTO等职位的磨砺:当你站在 ...

  9. 太赞了!Python竟可以轻松实现音频格式无损转换

    太赞了!Python竟可以轻松实现音频格式无损转换 </h1><div class="clear"></div><div class=&q ...

  10. python快速编辑入门答案_太惨!学Python方法用错,直接从入门到放弃!

    原标题:太惨!学Python方法用错,直接从入门到放弃! 从你开始学习编程的那一刻起,就注定了以后所要走的路-从编程学习者开始,依次经历实习生.程序员.软件工程师.架构师.CTO等职位的磨砺:当你站在 ...

最新文章

  1. 黑马vue---1-7、vue杂记
  2. idea修改新的git提交地址
  3. mysql函数封装_PHP访问MYSQL数据库封装类(附函数说明)
  4. python3.8文档_python 3.8的新功能
  5. Tensorflow--图
  6. 红橙Darren视频笔记 点赞效果 动画练习
  7. c++函数可变参数列表foo(int a, ...){}中的省略号“...”
  8. 获取客户端登录ip地址
  9. Matlab R2016a安装教程
  10. CImageList用法介绍 (zz)
  11. svn 客户端下载地址
  12. JDY-24M蓝牙应用探索
  13. 服务器建文件夹,服务器建立文件夹
  14. grpc系列3-自定义端镜像GOAWAY with error code ENHANCE_YOUR_CALM and debug data equal to “too_many_pings“
  15. 如何将数据导入python
  16. 3D成像汇总(原理解析)--- 双目视觉、激光三角、结构光、ToF、光场、全息
  17. 【计算机网络】6 路由器与静态路由配置
  18. python无法启动0xc0000022_无法正常启动0xc0000022?0xc0000022一键修复教程
  19. 关于 OpenSSL“心脏出血”漏洞的分析
  20. GitChat·管理 | 一篇文章读懂项目管理中的精髓

热门文章

  1. vscode环境搭建:配置prettier
  2. 快速开发~Rafy框架的初步认识
  3. 从零开始写一个RTSP服务器(一)RTSP协议讲解
  4. 蓝凌OA系统任意文件读取
  5. 攻防世界-web-mfw
  6. 史上最全的Windows进程详解!
  7. 英特尔发布三代服务器芯片至强,英特尔发布第三代至强处理器:10nm Ice Lake架构、最高40核、AI和安全性增强...
  8. led大屏按实际尺寸设计画面_led显示屏尺寸大小的计算方式
  9. Spring实战第五章idea复现
  10. DSP TMS320C5509A 控制DDS AD9854芯片进行AM-MSK调制