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实现的守护进程(Daemon)用法实例
Jun 02 Python
python利用装饰器进行运算的实例分析
Aug 04 Python
jupyter安装小结
Mar 13 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
python微信跳一跳系列之棋子定位像素遍历
Feb 26 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 Python
Python函数参数类型及排序原理总结
Dec 19 Python
Python爬虫headers处理及网络超时问题解决方案
Jun 19 Python
Python编写单元测试代码实例
Sep 10 Python
Anaconda+spyder+pycharm的pytorch配置详解(GPU)
Oct 18 Python
python语言中pandas字符串分割str.split()函数
Aug 05 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 session机制
2011/07/17 PHP
ThinkPHP之R方法实例详解
2014/06/20 PHP
Linux系统下php获得系统分区信息的方法
2015/03/30 PHP
php实现的简单日志写入函数
2015/03/31 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
PHP基于SMTP协议实现邮件发送实例代码
2017/04/27 PHP
window.open的功能全解析
2006/10/10 Javascript
js中各浏览器中鼠标按键值的差异
2011/04/07 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
js 延迟加载 改变JS的位置加快网页加载速度
2012/12/11 Javascript
javascript打印大全(打印页面设置/打印预览代码)
2013/03/29 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
JS封装通过className获取元素的函数示例
2016/12/20 Javascript
js实现百度登录框鼠标拖拽效果
2017/03/07 Javascript
JavaScript转换数据库DateTime字段类型方法
2017/06/27 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
2018/08/08 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
用python制作游戏外挂
2018/01/04 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
python3实现二叉树的遍历与递归算法解析(小结)
2019/07/03 Python
Django中自定义admin Xadmin的实现代码
2019/08/09 Python
python2和python3实现在图片上加汉字的方法
2019/08/22 Python
详解Python GUI编程之PyQt5入门到实战
2020/12/10 Python
css3之UI元素状态伪类选择器实例演示
2017/08/11 HTML / CSS
土耳其风格手工珠宝:Ottoman Hands
2019/07/26 全球购物
锐步香港官方网上商店:Reebok香港
2020/11/05 全球购物
保护环境倡议书
2014/04/14 职场文书
团日活动总结报告
2014/06/25 职场文书
会计实训报告范文
2014/11/04 职场文书