Python 实现 贪吃蛇大作战 代码分享


Posted in Python onSeptember 07, 2016

Python 实现 贪吃蛇大作战 代码分享

感觉游戏审核新政实施后,国内手游市场略冷清,是不是各家的新游戏都在排队等审核。媒体们除了之前竞相追捧《Pokemon Go》热闹了一把,似乎也听不到什么声音了。直到最近几天,突然听见好几人都提到同一个游戏,网上还有人表示朋友圈被它刷屏了。(不过现在微信已经悍然屏蔽了它的分享)

这个游戏就是现在iOS免费榜排名第一的《贪吃蛇大作战》。一个简单到不行的游戏,也不知道怎么就火了。反正一款游戏火了,各路媒体、专家总能说出种种套路来,所以我就不发表意见了。不过这实在是一个挺好实现的游戏,于是一时技痒,拿 Python 做了一个实现。

【动图】

Python 实现 贪吃蛇大作战 代码分享

demo 花了大约一整天时间,实现了基本效果(没做加速)。代码已上传 GitHub:

GitHub - crossin/gluttonous: game of gluttonous python(仿制《贪吃蛇大作战》)

使用了 cocos2d-python 作为游戏引擎。如果要运行代码,需要安装 Python 2.7 和 cocos2d 库。

pip install cocos2d

代码实现上的几个难点:

运动方向的控制。键盘上只有上下左右四个键,要转换到 360 度的运动方向,需要用到不少三角函数运算。

蛇身子的处理。这里我用了一个路径列表,记录蛇头经过的位置,身子则根据路径中的对应数据更新位置。

电脑的运动策略。这里我用的方法是,对于在头部范围内的其他蛇身,计算蛇身与蛇头连线的角度,和自身的运动方向进行比较,如果角度相差很小,就意味着会撞上,于是调整当前运动方向。

运行效率。最大的效率瓶颈在于屏幕上的图片绘制。最开始完成的版本,场上蛇身总量达到 300 左右就卡顿严重了。后来用 cocos 的 BatchNode 替代直接添加,大大减少了图片绘制次数,可保证游戏顺畅运行。但如果玩到分钟很高,依然会出现效率问题,暂时没有解决。

平心而论,Python 并不适合做商业游戏,而用来学习或者开发原型倒也是个不错的选择。现在很流行的手机游戏开发引擎 cocos2d-x,最初就是源于 Python 的版本,也就我这次使用的 cocos2d 库。虽然在功能上有一定差距,但引擎结构是非常接近的,包括其中场景和层的概念、动作、事件、刷新等。

只是心血来潮,随手写写,代码没怎么优化,注释也基本没有。大家凑合看看。如果点赞、转发的人多,之后会考虑继续优化,并专门做一个系列教程。

Python 相关文章推荐
Python判断值是否在list或set中的性能对比分析
Apr 16 Python
Python Socket编程详细介绍
Mar 23 Python
Scrapy的简单使用教程
Oct 24 Python
python正则表达式爬取猫眼电影top100
Feb 24 Python
用Python下载一个网页保存为本地的HTML文件实例
May 21 Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 Python
python 使用正则表达式按照多个空格分割字符的实例
Dec 20 Python
python+django+rest框架配置创建方法
Aug 31 Python
django执行数据库查询之后实现返回的结果集转json
Mar 31 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
Django数据统计功能count()的使用
Nov 30 Python
python自动化调用百度api解决验证码
Apr 13 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 #Python
Python 编码处理-str与Unicode的区别
Sep 06 #Python
Python如何获取系统iops示例代码
Sep 06 #Python
python3编码问题汇总
Sep 06 #Python
用Python实现命令行闹钟脚本实例
Sep 05 #Python
Python爬虫爬取美剧网站的实现代码
Sep 03 #Python
Python选课系统开发程序
Sep 02 #Python
You might like
js中cookie的使用详细分析
2008/05/28 Javascript
js 深拷贝函数
2008/12/04 Javascript
JavaScript 学习笔记(七)字符串的连接
2009/12/31 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
JS调用Android、Ios原生控件
2017/01/06 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
input框中自动展示当前日期yyyy/mm/dd的实现方法
2017/07/06 Javascript
vue登录注册及token验证实现代码
2017/12/14 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
mpvue微信小程序的接口请求fly全局拦截代码实例
2019/11/13 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:59]翻天覆地,因你而变,7.20版本地图更新速览
2018/11/24 DOTA
Python实现的简单算术游戏实例
2015/05/26 Python
python使用pyqt写带界面工具的示例代码
2017/10/23 Python
python中模块的__all__属性详解
2017/10/26 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
Python eval函数原理及用法解析
2020/11/14 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
CSS3中的Media Queries学习笔记
2016/05/23 HTML / CSS
Sneaker Studio法国:购买运动鞋
2018/06/08 全球购物
西班牙语在线票务市场:SuperBoletería
2019/06/10 全球购物
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
shell程序中如何注释
2012/02/17 面试题
超市总经理岗位职责
2014/02/02 职场文书
捐款倡议书格式范文
2014/05/14 职场文书
代理人委托书
2014/09/16 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
物业公司管理制度
2015/08/05 职场文书
放假通知怎么写
2015/08/18 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
java调用Restful接口的三种方法
2021/08/23 Java/Android
Python经常使用的一些内置函数
2022/04/11 Python