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随机生成一个6位的验证码代码分享
Mar 24 Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 Python
python筛选出两个文件中重复行的方法
May 31 Python
Python理解递归的方法总结
Jan 28 Python
python安装scipy的步骤解析
Sep 28 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
Tensorflow读取并输出已保存模型的权重数值方式
Jan 04 Python
Python bytes string相互转换过程解析
Mar 05 Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 Python
django为Form生成的label标签添加class方式
May 20 Python
如何利用python读取micaps文件详解
Oct 18 Python
django使用多个数据库的方法实例
Mar 04 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
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
2011/03/29 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
JQuery+JS实现仿百度搜索结果中关键字变色效果
2011/08/02 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
JS获取html对象的几种方式介绍
2013/12/05 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
Jquery组件easyUi实现表单验证示例
2016/08/23 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
Vue2.0表单校验组件vee-validate的使用详解
2017/05/02 Javascript
js单页hash路由原理与应用实战详解
2017/08/14 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
利用nginx + node在阿里云部署https的步骤详解
2017/12/19 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
微信小程序的部署方法步骤
2018/09/04 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
2018/04/19 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
python读写csv文件的方法
2019/08/13 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
2020/09/03 Python
两道JAVA笔试题
2016/09/14 面试题
公司司机岗位职责
2014/02/07 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
地雷战观后感
2015/06/09 职场文书
初中数学教学随笔
2015/08/15 职场文书
2016年寒假社会实践活动心得体会
2015/10/09 职场文书
有关信念的名言语录集锦
2019/12/06 职场文书