cocos2dx--cardNumber

来源:互联网 发布:软件展示html模版 编辑:程序博客网 时间:2024/05/16 10:49

一个叫carNumber的游戏

游戏分为四个class,分别是: 

class LayerStart : public CCLayer

class CardItem : public CCSprite

class LayerGame : public CCLayer

class LayerOver : public CCLayer

下面分别讲述每个类的作用

1.    LayerStart

在LayerStart中,我们要添加四个menu控件,分别是EASY、NORMAL、HARD、QUIT,分别用来控制游戏的三种游戏难度,以及游戏退出。


四个控件指定的程序与其声明:

根据在程序中生成所需要的scene

     

normal和hard的函数体类似,quit函数体为:


四个menuItem添加到menu中,并进行竖直排列且添加到Layer中:


效果图:


2.    CardItem

主要任务是生成三个部分,一个为80*80的方块,后这些方块将屏幕(800*600)分成60个部分;二是生成标签数字ttf,且将其放置到方块中;三是生成白色70*70的遮罩,这些遮罩也要放置到方块之中。idx用来控制选择的难度数值,其中_easy、_normal、_hard设置为枚举类型,分别是5、7、9.

由于不能使用宏CREATE_FUNC()来为类设置create()函数,所以先要手动为CardItem添加一个create()函数:


函数体:

生成80*80的方块:


生成标签数字:


生成70*70白色遮罩:

数字和白块分别显示:


 3.    LayerGame

在这个类中需要实现的是,找到所有的点,找到可以用的点

 所有的点,即(0,0)、(0,80)、(80,0)、(80,80)…(800,480),一共是60个点,保存在allPoints中,allPoints是一个CCPointArray类型的数据。


可以用的点,即找出60个随机数,将数字和60个点进行相关联

60个随机数使用srand(time(NULL)函数,然后使用rand()函数对60进行取余,所得到的就是0—59的随机数(类似,想取得0—10的随机数只需要rand()对10进行取余即可)。因为不能取得相同的数字,故要使用迭代器对容器进行遍历,其代码如下:


找到所需要的数字以后,开始进行数字和位置要进行绑定,也就是生成卡片。因为一个个的卡片很难进行管理,故添加一个数组allCards用来储存所得到的卡片:


下面是游戏最重要的一个部分,也就是实现游戏的具体功能,首先是点击带有数字的卡片后,全部卡片要变成白色,如下图所示:

         

显示白块的代码:


点击后数字变白块代码:


后需要实现,按照数字的顺序点击白块之后,白块消失,也就是个卡片消失,且当没按照顺序点击时,需要实现判断为游戏失败。代码如下:


其中clickStart初始值设定为0。

4.    LayerOver

当游戏结束,要实现返回主界面以及游戏的成功与失败,如下图:

游戏成功和失败:

   


故LayerOver要实现两种场景,添加变量bool res,来实现场景选择:


在LayerStart::ccTouchBegan中调用:


整个游戏设计结束。








原创粉丝点击