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正则表达式匹配HTML页面编码
Apr 08 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
Oct 30 Python
11个Python3字典内置方法大全与示例汇总
May 13 Python
如何基于python实现画不同品种的樱花树
Jan 03 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
Python多线程:主线程等待所有子线程结束代码
Apr 25 Python
在Keras中实现保存和加载权重及模型结构
Jun 15 Python
python 写一个水果忍者游戏
Jan 13 Python
Python包管理工具pip的15 个使用小技巧
May 17 Python
教你漂亮打印Pandas DataFrames和Series
May 29 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 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实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
InnerHtml和InnerText的区别分析
2009/03/13 Javascript
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
2012/06/22 Javascript
js 实现 input type="file" 文件上传示例代码
2013/08/07 Javascript
javascript框架设计读书笔记之模块加载系统
2014/12/02 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
React Form组件的实现封装杂谈
2018/05/07 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
python 查找字符串是否存在实例详解
2017/01/20 Python
老生常谈python函数参数的区别(必看篇)
2017/05/29 Python
如何在python中使用selenium的示例
2017/12/26 Python
python sys.argv[]用法实例详解
2018/05/25 Python
儿童学习python的一些小技巧
2018/05/27 Python
python语音识别实践之百度语音API
2018/08/30 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
Python箱型图绘制与特征值获取过程解析
2019/10/22 Python
python中setuptools的作用是什么
2020/06/19 Python
Python生成器generator原理及用法解析
2020/07/20 Python
无惧面试,带你搞懂python 装饰器
2020/08/17 Python
python实现无边框进度条的实例代码
2020/12/30 Python
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
能否解释一下XSS cookie盗窃是什么意思
2012/06/02 面试题
新闻专业本科生的自我评价分享
2013/11/20 职场文书
酒店保安员岗位职责
2014/01/31 职场文书
就业意向书范文
2014/04/01 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
满月酒邀请函
2015/01/30 职场文书
荆州古城导游词
2015/02/06 职场文书
你为什么是穷人?可能是这5个缺点造成
2019/07/11 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
3050和2060哪个好 性能差多少 差距有多大 谁更有性价比
2022/06/17 数码科技