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正则实现计算器功能
Dec 14 Python
Python实现的计算器功能示例
Apr 26 Python
Python学习_几种存取xls/xlsx文件的方法总结
May 03 Python
Python实现字符型图片验证码识别完整过程详解
May 10 Python
详解Python二维数组与三维数组切片的方法
Jul 18 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
Feb 12 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 Python
python 实现数据库中数据添加、查询与更新的示例代码
Dec 07 Python
python 日志模块logging的使用场景及示例
Jan 04 Python
python 获取域名到期时间的方法步骤
Feb 10 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 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 项目的方法
2007/01/02 PHP
ASP和PHP都是可以删除自身的
2007/04/09 PHP
orm获取关联表里的属性值
2016/04/17 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
幻宇的层模拟窗口效果-提供演示和下载
2007/01/20 Javascript
JavaScript中的Window窗口对象
2008/01/16 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
JSCode all of Brower 全局屏蔽网页右键功能 具体实现
2013/06/05 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
微信JS SDK接入的几点注意事项(必看篇)
2017/06/23 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
vue 实现剪裁图片并上传服务器功能
2018/03/01 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
将Django项目部署到CentOs服务器中
2018/10/18 Python
python实现三维拟合的方法
2018/12/29 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
Python模块 _winreg操作注册表
2020/02/05 Python
python使用python-pptx删除ppt某页实例
2020/02/14 Python
pycharm下pyqt4安装及环境配置的教程
2020/04/24 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
科室工作的个人自我评价
2013/10/30 职场文书
数控机械专业个人的自我评价
2014/01/02 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
车辆年检委托书范本
2014/10/14 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
2015年安全生产责任书
2015/01/30 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
2015年工商局个人工作总结
2015/07/23 职场文书