先上一张图给大家看看
当大家看到这张图片的时候会看到周围一圈对号,这个是我做标记用的,当然 真正的开发游戏过程中 这些对号是不存在的。我这里想给大家说明的是 假如我们的 地图是14*8的 那么其实真正的地图布局应该是16*10 为什么要这么做呢 那是因为我们要让我们所有的路线都从我们规定的方格内经过,不能越界。如果你是14*8 的那么当四边上有可以连通的时候 就要做大量的判断来处理。那么为什么我们不避免这些问题呢。这样我们在规划路线的时候 就不存在了特殊的情况。
不知道大家是否明白我说的什么意思。如果不懂的话可以给我留言我会给大家回复 解答。
关于图片的生成我这里说一下 如何保证所有的图片 都是成对出现呢 这里有个前提条件就是我们的地图布局一定要成偶数。那么我们在生出图片的 我们每一次取出一张图片生成两个一模一样的 这样就保证地图里面所有的图片肯定是成对出现的。
主要代码是这样的
是不是很简单啊
至于如何把生成的东西给打乱。这个cocos2d-x 提供了很好用的方法那就是从数组中取出的时候 可以随机去取出。
下面把整个地图布局的方法给贴出来
- boolLLKmapLayer::setUpdateView(){
- boolisRet=false;
- do{
- //得到需要的总张数//一定要是偶数
- }
- inti=0;i<row+2;i++){
- intj=0;j<this->cloum+2;j++){
- if((i==0)||(j==0)||(j==cloum+1)||(i==row+1)){
- CustomSprite*temp=CustomSprite::createWithSpritePicIndex(0,0); background-color:inherit">temp->displayCustome();
- temp->setX(j);
- temp->setY(i);
- temp->setAnchorPoint(ccp(0,0));
- temp->setPosition(ccp(45*(j-1),51*(i-1)));
- this->addChild(temp);
- this->totalArray->addObject(temp);
- }else{
- CustomSprite*phit=(CustomSprite*)temparry->randomObject();
- temparry->removeObject(phit,false);
- phit->setAnchorPoint(ccp(0,0); background-color:inherit">phit->setPosition(ccp(45*(j-1),153); word-wrap:normal; border:none; background-color:inherit">this->addChild(phit);
- llkArray->addObject(phit);
- phit->setX(j);
- phit->setY(i);
- this->totalArray->addObject(phit);
- }
- isRet=true;
- while(0);
- returnisRet;
- 是不是很少的代码就实现了这个功能了。
下面就开始我们今天的重头戏 那就是连连看的主要算法
首先先说明最简单 那就是一线贯通。
大家看到我画的红线 是连连看中最简单的 两种连接方式
只要两张图片 处于同一水平线或者同一垂直线如果两张图片中没有别的图片间隔就代表可以连通消除了
主要代码
copy