Hello,我们又见啦,这篇我们将来分析一下游戏2048滑动上下左右相加逻辑的实现。
我们需要借助数组,来实现这个逻辑功能。在HelloWorldScene.h中添加一个数组声明:
//创建一个卡片二位数组 CardSprite* cardArr[4][4];
还记得我们在创建卡片函数createCardSprite函数中得到的卡片card吗?现在,我们就把这个卡片加入到数组中:
//把卡片加入到数组中 cardArr[i][j] = card;
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[x1][y]->getNumber() > 0) { if (cardArr[x][y]->getNumber() <= 0) { cardArr[x][y]->setNumber(cardArr[x1][y]->getNumber()); cardArr[x1][y]->setNumber(0); x--; isdo = true; }else if(cardArr[x][y]->getNumber() == cardArr[x1][y]->getNumber()){ cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2); cardArr[x1][y]->setNumber(0); isdo = true; } break; } } } } return isdo; }
另外三个方向滑动的逻辑代码,也类似。
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[x1][y]->getNumber() > 0) { if (cardArr[x][y]->getNumber() <= 0) { cardArr[x][y]->setNumber(cardArr[x1][y]->getNumber()); cardArr[x1][y]->setNumber(0); x++; isdo = true; }else if(cardArr[x][y]->getNumber() == cardArr[x1][y]->getNumber()){ cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2); cardArr[x1][y]->setNumber(0); isdo = true; } break; } } } } return isdo; }
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[x][y1]->getNumber() > 0) { if (cardArr[x][y]->getNumber() <= 0) { cardArr[x][y]->setNumber(cardArr[x][y1]->getNumber()); cardArr[x][y1]->setNumber(0); y--; isdo = true; }else if(cardArr[x][y]->getNumber() == cardArr[x][y1]->getNumber()){ cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2); cardArr[x][y1]->setNumber(0); isdo = true; } break; } } } } return isdo; }
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[x][y1]->getNumber() > 0) { if (cardArr[x][y]->getNumber() <= 0) { cardArr[x][y]->setNumber(cardArr[x][y1]->getNumber()); cardArr[x][y1]->setNumber(0); y++; isdo = true; }else if(cardArr[x][y]->getNumber() == cardArr[x][y1]->getNumber()){ cardArr[x][y]->setNumber(cardArr[x][y]->getNumber()*2); cardArr[x][y1]->setNumber(0); isdo = true; } break; } } } } return isdo; }
运行代码后,效果如下:
接下来我们来玩一下游戏,试试
嘿嘿,是不是觉得不错呢?赶紧动起手来,自己也搞一个吧!
最后要特别感谢一下帅印。