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

本文详细解析了游戏2048中滑动上下左右相加的逻辑实现,包括创建卡片数组、添加数字、具体逻辑操作以及游戏体验演示。通过此教程,读者可以了解并实践游戏开发中的关键算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


1. 添加一个数组


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

	//创建一个卡片二位数组
	CardSprite* cardArr[4][4];

2. 把数字添加到数组中


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

			//把卡片加入到数组中
			cardArr[i][j] = card;

3. 添加具体的逻辑


(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[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;
}

如果右边的数等于左边的数,那么左边的数乘以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[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;
}

(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[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;
}

(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[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;
}


4. 玩游戏


运行代码后,效果如下:


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

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



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



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



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



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


最后要特别感谢一下帅印。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值