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计算三角函数之atan()方法的使用
May 15 Python
Python实现压缩与解压gzip大文件的方法
Sep 18 Python
Python的高阶函数用法实例分析
Apr 11 Python
python中update的基本使用方法详解
Jul 17 Python
python 字典有序并写入json文件过程解析
Sep 30 Python
python快速排序的实现及运行时间比较
Nov 22 Python
关于Pytorch MaxUnpool2d中size操作方式
Jan 03 Python
Python 从attribute到property详解
Mar 05 Python
查看keras各种网络结构各层的名字方式
Jun 11 Python
python map比for循环快在哪
Sep 21 Python
Opencv实现二维直方图的计算及绘制
Jul 21 Python
Python anaconda安装库命令详解
Oct 16 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中的登陆login
2007/01/18 PHP
PHP 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
2013/01/06 PHP
php+ajax无刷新上传图片实例代码
2015/11/17 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
基于prototype的validation.js发布2.3.4新版本,让你彻底脱离表单验证的烦恼
2006/12/06 Javascript
用js计算页面执行时间的函数
2006/12/07 Javascript
Javascript中的数学函数集合
2007/05/08 Javascript
Div Select挡住的解决办法
2008/08/07 Javascript
分享一个asp.net pager分页控件
2012/01/04 Javascript
你必须知道的Javascript知识点之"this指针"的应用
2013/04/23 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
javascript中clone对象详解
2014/12/03 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
浅谈原生JS中的延迟脚本和异步脚本
2017/07/12 Javascript
vue路由前进后退动画效果的实现代码
2018/12/10 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例
2019/08/27 Python
如何实现一个python函数装饰器(Decorator)
2020/10/12 Python
Python Pandas数据分析工具用法实例
2020/11/05 Python
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
BASIC HOUSE官方旗舰店:韩国著名的服装品牌
2018/09/27 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
2013/03/30 面试题
最新的咖啡店创业计划书
2013/12/30 职场文书
内蒙古鄂尔多斯市市长寄语
2014/04/10 职场文书
投标授权委托书范文
2014/08/02 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
利用Python第三方库实现预测NBA比赛结果
2021/06/21 Python
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL