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中的字典遍历备忘
Jan 17 Python
python之消除前缀重命名的方法
Oct 21 Python
对Python w和w+权限的区别详解
Jan 23 Python
python中嵌套函数的实操步骤
Feb 27 Python
Django框架中间件(Middleware)用法实例分析
May 24 Python
python里运用私有属性和方法总结
Jul 08 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
python飞机大战pygame游戏框架搭建操作详解
Dec 17 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
Jun 18 Python
tensorflow 动态获取 BatchSzie 的大小实例
Jun 30 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语法(2)
2006/10/09 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
2015/05/25 PHP
PHP FileSystem 文件系统常用api整理总结
2019/07/12 PHP
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
jquery重新播放css动画所遇问题解决
2013/08/21 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
有关wxpython pyqt内存占用问题分析
2014/06/09 Python
python通过zlib实现压缩与解压字符串的方法
2014/11/19 Python
python中装饰器级连的使用方法示例
2017/09/29 Python
python: 判断tuple、list、dict是否为空的方法
2018/10/22 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
Python语言进阶知识点总结
2019/05/28 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
Python class的继承方法代码实例
2020/02/14 Python
python实现连连看游戏
2020/02/14 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
柒牌官方商城:中国男装优秀品牌
2017/06/30 全球购物
有影响力的人、名人和艺术家的官方商品:Represent
2019/11/26 全球购物
个人求职简历的自我评价范文
2013/10/09 职场文书
园林设计师自荐信
2013/11/18 职场文书
节约用水演讲稿
2014/05/21 职场文书
人事任命书范文
2014/06/04 职场文书
中秋节晚会开场白
2015/05/29 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server