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中xrange和range的区别
May 13 Python
python根据文件大小打log日志
Oct 09 Python
Python中的lstrip()方法使用简介
May 19 Python
python list格式数据excel导出方法
Oct 31 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
使用Python操作ArangoDB的方法步骤
Feb 02 Python
python模块如何查看
Jun 16 Python
python如何代码集体右移
Jul 20 Python
pycharm2020.2 配置使用的方法详解
Sep 16 Python
python实现定时发送邮件
Dec 23 Python
matplotlib事件处理基础(事件绑定、事件属性)
Feb 03 Python
Python用SSH连接到网络设备
Feb 18 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
不用数据库的多用户文件自由上传投票系统(3)
2006/10/09 PHP
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
js监听输入框值的即时变化onpropertychange、oninput
2011/07/13 Javascript
imgAreaSelect 中文文档帮助说明
2011/10/08 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
jQuery中clearQueue()方法用法实例
2014/12/29 Javascript
jQuery实现的跨容器无缝拖动效果代码
2016/06/21 Javascript
利用jQuery.Validate异步验证用户名是否存在(推荐)
2016/12/09 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
深入解析nodejs HTTP服务
2017/07/25 NodeJs
一个Js文件函数中调用另一个Js文件函数的方法演示
2017/08/14 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
Python单例模式实例分析
2015/01/14 Python
python中lambda()的用法
2017/11/16 Python
python实现报表自动化详解
2017/11/16 Python
Python读写/追加excel文件Demo分享
2018/05/03 Python
详解python播放音频的三种方法
2019/09/23 Python
Pytorch mask-rcnn 实现细节分享
2020/06/24 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
Corelle官方网站:购买康宁餐具
2016/11/02 全球购物
雅高酒店中国:Accorhotels.com China
2018/03/26 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
财务会计自荐信范文
2014/02/21 职场文书
个人贷款承诺书
2014/03/28 职场文书
市场推广策划方案
2014/06/02 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
统计员岗位职责范本
2015/04/14 职场文书
淡雅古典唯美少女娇媚宁静迷人写真
2022/03/21 杂记
Python图像处理库PIL详细使用说明
2022/04/06 Python