【2048强势来袭 cocos2d-x版本】第四期:游戏滑动上下左右相加的逻辑

Hello,我们又见啦,这篇我们将来分析一下游戏2048滑动上下左右相加逻辑的实现。

  1. 添加一个数组

我们需要借助数组,来实现这个逻辑功能。在HelloWorldScene.h中添加一个数组声明:

 //创建一个卡片二位数组
 CardSprite* cardArr;
  1. 把数字添加到数组中

还记得我们在创建卡片函数createCardSprite函数中得到的卡片card吗?现在,我们就把这个卡片加入到数组中:

 //把卡片加入到数组中
 cardArr* = card;*
  1. 添加具体的逻辑

(1)向左滑动函数的逻辑代码:

bool HelloWorld::doLeft(){
    bool isdo = false;
    for (int y = 0; y < 4; y++) {
        for (int x = 0; x < 4; x++) {
             for (int x1 = x + 1; x1 < 4; x1++) {
                if (cardArr->getNumber() > 0) {
                    if (cardArr->getNumber() <= 0) {
                        cardArr->setNumber(cardArr->getNumber());
                        cardArr->setNumber(0);
                         x--;
                        isdo = true;
                    }else if(cardArr->getNumber() == cardArr->getNumber()){
                        cardArr->setNumber(cardArr->getNumber()*2);
                        cardArr->setNumber(0); 
                        isdo = true;
                    }
                    break;
                }
            }
         }
    }
    return isdo;
}

如果右边的数等于左边的数,那么左边的数乘以2,然后把右边的数设置为0,也就变为了空。

另外三个方向滑动的逻辑代码,也类似。

(2)向右滑动函数的逻辑代码:

bool HelloWorld::doRight(){

    bool isdo = false;
    for (int y = 0; y < 4; y++) {
        for (int x = 3; x >= 0; x--) {
             for (int x1 = x - 1; x1 >= 0; x1--) {
                if (cardArr->getNumber() > 0) {
                    if (cardArr->getNumber() <= 0) {
                        cardArr->setNumber(cardArr->getNumber());
                        cardArr->setNumber(0);
                         x++;
                        isdo = true;
                    }else if(cardArr->getNumber() == cardArr->getNumber()){
                        cardArr->setNumber(cardArr->getNumber()*2);
                        cardArr->setNumber(0); 
                        isdo = true;
                    }
                    break;
                }
            }
         }
    }
    return isdo;
}

(3)向下滑动函数的逻辑代码:

bool HelloWorld::doDown(){
    bool isdo = false;
    for (int x = 0; x < 4; x++) {
        for (int y = 0; y < 4; y++) {
             for (int y1 = y + 1; y1 < 4; y1++) {
                if (cardArr->getNumber() > 0) {
                    if (cardArr->getNumber() <= 0) {
                        cardArr->setNumber(cardArr->getNumber());
                        cardArr->setNumber(0);
                         y--;
                        isdo = true;
                    }else if(cardArr->getNumber() == cardArr->getNumber()){
                        cardArr->setNumber(cardArr->getNumber()*2);
                        cardArr->setNumber(0);
                         isdo = true;
                    }
                    break;
                }
            }
         }
    }
    return isdo;
}

(4)向上滑动函数的逻辑代码:

bool HelloWorld::doUp(){
    bool isdo = false;
    for (int x = 0; x < 4; x++) {
        for (int y = 3; y >= 0; y--) {
             for (int y1 = y - 1; y1 >= 0; y1--) {
                if (cardArr->getNumber() > 0) {
                    if (cardArr->getNumber() <= 0) {
                        cardArr->setNumber(cardArr->getNumber());
                        cardArr->setNumber(0);
                         y++;
                        isdo = true;
                    }else if(cardArr->getNumber() == cardArr->getNumber()){
                        cardArr->setNumber(cardArr->getNumber()*2);
                        cardArr->setNumber(0);
                         isdo = true;
                    }
                    break;
                }
            }         }
    }
    return isdo;
}
  1. 玩游戏

运行代码后,效果如下:

接下来我们来玩一下游戏,试试

(1)向左滑动,变成下图:

(2)向上滑动,变成上图:

(3)向右滑动,变成下图:

(4)向下滑动,变成下图:

嘿嘿,是不是觉得不错呢?赶紧动起手来,自己也搞一个吧!

不断更新中。或者请猛戳 http://blog.csdn.net/legendof1991?viewmode=contents 感谢支持

第一期:http://www.cocoachina.com/bbs/read.php?tid=198237
http://www.cocoachina.com/bbs/read.php?tid=198237

这就算完成了吧 挺不错的

还没呢,后面还有

新手来膜拜!

互相学习,一起进步哈:7::7::7::7::7:

话说没人发现这个逻辑是错误的?

2048游戏逻辑
没有认真读楼上仁兄代码,
但如果 一行为 2 2 4 8 向右移动将变成0 4 4 8 而不是0 0 0 16
如果一行为 2 2 4 4则向右移动变成0 0 4 8
如果一行为2 2 2 16 则变成0 2 4 16
楼主考虑了没

没错啊,2048就是这规则啊。