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实现的简单发送邮件脚本分享
Nov 07 Python
Python 自动补全(vim)
Nov 30 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
详解django+django-celery+celery的整合实战
Mar 19 Python
不到20行代码用Python做一个智能聊天机器人
Apr 19 Python
python 函数中的内置函数及用法详解
Jul 02 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
python实现拼图小游戏
Feb 22 Python
利用python在excel中画图的实现方法
Mar 17 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
解决Keras 中加入lambda层无法正常载入模型问题
Jun 16 Python
python中操作文件的模块的方法总结
Feb 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
40年前的这部特摄片恐龙特级克塞号80后的共同回忆
2020/03/08 日漫
递归列出所有文件和目录
2006/10/09 PHP
PHP与已存在的Java应用程序集成
2006/10/09 PHP
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
PDO操作MySQL的基础教程(推荐)
2017/08/18 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
js 操作select和option常用代码整理
2012/12/13 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
基于Jquery实现键盘按键监听
2014/05/11 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
完美解决axios在ie下的兼容性问题
2018/03/05 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
2018/09/03 Javascript
Vue基本指令实例图文讲解
2021/02/25 Vue.js
Python中动态获取对象的属性和方法的教程
2015/04/09 Python
用Python解决计数原理问题的方法
2016/08/04 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
Python自定义函数定义,参数,调用代码解析
2017/12/27 Python
对python中两种列表元素去重函数性能的比较方法
2018/06/29 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
python设置环境变量的原因和方法
2019/06/24 Python
10个Python面试常问的问题(小结)
2019/11/20 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
python中round函数保留两位小数的方法
2020/12/04 Python
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
定义一结构体数组表示分数,并求两个分数相加之和
2013/06/11 面试题
绿色环保家庭事迹材料
2014/08/31 职场文书
群众路线教育实践活动总结
2014/10/30 职场文书
教师听课评语大全
2014/12/31 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang