「全套源码」基于Cocos实现的贪吃蛇游戏

感谢『简书 ID: 何小成』友情提供

http://www.jianshu.com/p/dcebe85e0620

01

前言

贪吃蛇相信大家都玩过。我对贪吃蛇的最初印象就是在电子词典上,一只像素蛇在屏幕游走,饥渴难耐,看见豆子就要去吃,每吃到豆子就会长一节,当蛇的身体越来越长,它才发现这个世界变了,每一步都寸步难行。

无论蛇头触碰到屏幕边界还是自己身体,游戏就结束。这款游戏应该是比较经典的一个童年记忆。刚接触游戏开发的人也许会喜欢以这款游戏入手,因为贪吃蛇包含了很多游戏开发中的原理,难度也不大。

02

分析

  身体关节  

贪吃蛇的实现有多种方法,但今天,我想用面向对象的思想进行设计。任何程序开发都离不开面向对象的思想,通过面向对象我们能把很多抽象问题具象化,方便我们解决很多问题。而在贪吃蛇中,面向对象的思想依然实用。

在贪吃蛇中,我们可以把一条游走的蛇的每个关节当做是一个对象,而蛇本身是由多个关节组成的整体,当每个关节在移动时,我们就能看到蛇的移动,每个关节的位置以及移动方向都跟它的上一个关节息息相关,那么我们就可以把关节与它的上一个关节关联起来,实现如下结构:

45fe99ea2575e98fa1fb650f5615b29f.png

 移动方向  

如上所说,按照上面的关节关系来实现,那么蛇的移动方向就是与父节点的移动方向相关联。每一个关节应该有一个当前移动方向和下次移动方向,每一步移动,都是跟着当前移动方向走的,而父关节当前移动的方向即为子关节的下次移动方向,这样,只需要调整蛇头关节的下次移动方向,整条蛇就能顺着各自的父关节方向移动,蛇的移动方向图如下:

ffd45e42eacfeaaa2b8f37422051ee94.jpeg

03

设计

 项目结构  

按照前面的设计,我们大致可以划分为游戏场景类和关节类。

进入游戏场景类,再将一些全局的变量单独存在一个类中,项目结构可划分如下图:

4af73e53c71ad085af125c8fe69dda70.jpeg

项目结构图

全局变量类

游戏中的全局变量,提炼为一个全局变量类,其中参数可以根据需求灵活变动配置

93d33f1e42dc6da32e6988faf2ba5af8.png

关节类

按照以上设计的结构,每一个关节对象都应该包含蛇的当前方向、下次方向和蛇的父节点三个属性,代码如下:

7f9209519d47415afb47c0e670b5559e.jpeg

上面说的,关节的位置跟它的福关节的位置是息息相关的,那么初始化的时候,我们就需要根据父关节的移动方向来进行次关节的位置设置。这部分代码,我们可以放在onEnter方法中,代码如下:

58e1bfde66b51338c06ec3d6c4438c6a.jpeg

e2d680367471b92ad62710768233fe9c.jpeg

有了这三个属性,每一个节点还应该有最重要的游戏逻辑——move方法。每一个关节分别调用move方法,从游戏场景中就能看到整条蛇按照预定方向进行移动,而整条蛇的运动方向就是跟着头部关节的方向走,头部关节的方向则通过点击屏幕区域控制。
在move方法中,我们需要做以下事情:

26066280d855c213575856f6f196ade9.png

同时,如果是头部关节,我们还需要判断以下三个临界条件:

a8966b187b0994659fa5afc4d57920e6.png

其中1、3条件达成,则判定游戏结束,2条件达成,则能增加游戏分数,并且游戏继续。move方法代码如下:

68b18c03d87e9c9e9b9b9667c3b88259.jpeg5409f0d1551088718fd2857aac614d35.jpeg2d456e0ecbbe7e76325c88e4714dcf70.jpeg

游戏场景类

在游戏场景中我们需要以下几个变量:

5224afb7c04966219de740f1e30ffec5.jpeg

在cc.Layer的构造函数中对以上变量进行初始化,代码如下:

68f913ded270cebb80968a706061214c.jpeg

之后,我们首先需要在场景中绘制出一条蛇,初始化定义为1个头部关节,5个身体关节,由于我们对关节类做了很好的封装,所以初始化一条蛇的代码很简单,我们在onEnter方法中进行初始化,如下所示:

e36c318044ed3d035b6a1e89e1e3a03e.jpeg

初始化完了之后蛇是不会动的,如何让它动起来呢,我们就要用到在关节类中封装的move方法了,我们每隔一个时间,对所有的关节类执行一次move方法,就能实现蛇的移动,首先在onEnter中添加定时任务:

54d6e28fab09e890bc70587b0dfcde47.png

在这个snakeMove定时调用的方法中,我们要写出所有关节移动的逻辑,在这个方法中,我们需要完成以下几件事:

4076cf68b66197d4bfbe4e82bc8bccdc.png

代码如下:

b4f33f990d82f04705c5963d952f8e9e.jpeg

目前为止这条蛇只会按照我们初始化的方向一直走到碰壁,然后游戏结束的,如何改变蛇的运动轨迹呢?前面说到了,蛇头部节点的下次移动方向的改变,即可对整个蛇的移动轨迹进行改变,这里我们可以通过点击屏幕实现蛇头的下次移动方向的改变。

首先在onEnter方法中添加触摸事件监听:

9fc7ed5fba1f0e1c9543b576771de9de.png

然后在onTouchBegan方法中实现点击事件,我们允许点击有一个10像素的误差:

eafb258effebf3927dcade9703c2376e.jpeg

我们只差最后一步,就是蛇要吃的星星。我们可以在屏幕中任意位置随机产生一颗星星(又或者叫豆子,这都无所谓),只要这个星星满足以下条件,那么它就可以被绘制出来,否则我们需要重新随机这个星星的位置:

d40937f208fab2834a69af4889e3c96b.png

代码如下:

5f42ffbc69c97a46459d9cef376fd47e.jpeg

至此,游戏的主要逻辑就大功告成了!贪吃蛇不仅能在屏幕中游走,还能吃星星,并且碰到自身或边缘都会GameOver!

04

场景

说到GameOver,那么就必须要有一个Over的场景类了,毕竟有了开始场景、游戏场景和结束场景,才算得上一个完成的游戏流程嘛。结束场景类的实现很简单,只需要把游戏场景中获得的分数传递进来,然后在Label中展示即可,代码如下:

d52a4e85c19c41ae032ea76a06211e73.jpeg

d03bb9592d153c3958cf8aed582ebfaa.png

与结束场景一样,开始场景只需一个Label一个Menu即可,代码如下:

14a002f4ab5ff5c67ad62e2f2055228c.jpeg

这样,我们就能形成一个完成游戏流程了,游戏加载进入游戏开始场景,点击开始游戏进行如主游戏场景,游戏结束后进入结束场景,结束场景点击“再来一次”又可以回到开始场景。

05

效果

5ad064572aa989d409422299a8a4b64c.gif

贪吃蛇效果图

CVP平台的项目托管可看到实际运行效果
www.cocoscvp.com/usercode/2e17b3cd9586a574140e0bb765bad21673fc7686/

戳「阅读原文」还能get全套贪吃蛇开源代码。刚接触Cocos不久的新手,不妨尝试从这个经典小游戏开始练手吧!

8bed54d17a631f82126426fa7c257f6e.gif

戳原文,全套源码在手!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cocos2d-x是一个开的跨平台游戏引擎,它可以帮助开发者轻松地创建2D和3D游戏,并且支持多种平台,如iOS、Android、Windows和Web等。以下是使用Cocos2d-x实现跑酷游戏的一些码方案: 1. 游戏场景设计:使用Cocos2d-x的场景管理器来创建游戏场景,并设置游戏背景、角色和障碍物等元素。可以使用Tiled Map Editor等工具来绘制游戏地图,并将其导入到Cocos2d-x中。 2. 角色控制:利用Cocos2d-x的动画系统,加载角色的动画帧序列,使其具备奔跑、跳跃、下滑等动作。通过监听用户的触摸或按键事件,实现角色的移动控制。 3. 游戏碰撞检测:为障碍物、道具等游戏元素添加物理碰撞组件,并使用Cocos2d-x的碰撞检测功能,判断角色与障碍物是否发生碰撞。如果发生碰撞,可以触发游戏失败的逻辑。 4. 分数计算:在游戏中设定一定的难度和规则,当角色成功跳过某个障碍物或获得道具时,增加相应的分数。通过计数器来统计分数,并实时更新到游戏界面上。 5. 游戏音效:利用Cocos2d-x的音频模块,添加游戏所需的音效和背景音乐。可以在角色跳跃、碰撞等事件发生时,触发相应的声音效果,增加游戏的可玩性。 通过以上几个方面的设计,使用Cocos2d-x实现一个跑酷游戏码就可以完成了。当然,还可以根据个人的游戏需求进行更多的功能扩展和优化,使游戏更加丰富和有趣。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值