嵌套if语句,同时还删除选项

问题描述 投票:0回答:1

我目前正在尝试在C ++中进行“Wa-Tor模拟”赋值。它仍然在课程的早期,所以不是在任务的图形部分,而是鱼和鲨鱼的运动和功能。如果你不知道Wa-Tor模拟,我认为这对我的问题不重要。

我想要完成的是:

我有一个由空,鱼和鲨鱼组成的二维数组。

鲨鱼随机向上,向下,向左或向右移动。如果鲨鱼在最左边的点处向左移动阵列,它将出现在右侧(以及向上,向下和向右)。如果鲨鱼移动到没有鱼的位置,它将超过该位置,但如果遇到另一条鲨鱼,它将尝试相对于其第一个位置移动到另一个位置。

如果鲨鱼被其他鲨鱼包围,它就不会移动。

到目前为止我所做的是创建一个临时数组,它将移动鲨鱼,以便在运行for循环时,鲨鱼不会移动两次。

因此我的代码看起来像:

 for (int i = 0; i < MAX_X; i++) {
    for (int j = 0; j < MAX_Y; j++) {

        if (myOcean[i][j] == SHARK) {
            int randNum = (rand() % 4 + 1);

            switch (randNum) {
            case 1:
 //This is where I don't know how to properly code to make my function work, so bare with me while I make fake code..
 //if(myOcean[i+1][j] == SHARK){ GO BACK AND FIND A NEW RANDOM NUMBER, BUT THIS TIME REMOVE CASE 1. THUS NOT ALLOWING AN ATTEMPT TO MOVE [i+1]
                if ((i + 1) == MAX_X) { tempArray[0][j] = SHARK; }
                else { tempArray[i + 1][j] = SHARK; }
                tempArray[i][j] = EMPTY;
                break;
            case 2:
 // Same as above. Remove Case 2 if it doesnt work.
                if ((i - 1) < 0) { tempArray[MAX_X - 1][j] = SHARK; }
                else { tempArray[i - 1][j] = SHARK; }
                tempArray[i][j] = EMPTY;
                break;

            case 3:
 // Same as above. Remove Case 3 if it doesnt work.
                if ((j + 1) == MAX_Y) { tempArray[i][0] = SHARK; }
                else { tempArray[i][j + 1] = SHARK; }
                tempArray[i][j] = EMPTY;
                break;
            case 4:
 // Same as above. Remove Case 4 if it doesnt work.
                if ((j - 1) < 0) { tempArray[i][MAX_Y - 1] = SHARK; }
                else { tempArray[i][j - 1] = SHARK; }
                tempArray[i][j] = EMPTY;
                break;
            default:
  // No cases worked, thus the shark remains still.
                tempArray[i][j] = myOcean[i][j];

            }
        }
    }
}

从而结束我的问题。我不知道如何返回并删除特定案例。希望我能很好地解释我的问题,因为我对编码仍然很新。

c++ arrays if-statement nested switch-statement
1个回答
0
投票

像这样设计你的代码。有一个额外的remove_me变量,用于跟踪要删除的案例。并保持生成随机值,直到找到另一个有用的值。然后将remove_me变量设为null。再次遇到这种情况时,请将此变量指定为案例号。此外,您必须将j减1才能在循环的下一次迭代中运行相同的运行。对于第一种情况,代码看起来像这样,其余的你可以使用相同的逻辑设计:

int remove_me = 0
for (int i = 0; i < MAX_X; i++) {
    for (int j = 0; j < MAX_Y; j++) {

        if (myOcean[i][j] == SHARK) {
            int randNum = (rand() % 4 + 1);
            while (randNum == remove_me)
                randNum = (rand() % 4 + 1);
            remove_me = 0
            switch (randNum) {
                case 1:
                    if(myOcean[i+1][j] == SHARK){
                        remove_me = 1;
                        j--;
                    }
                    if ((i + 1) == MAX_X){
                        tempArray[0][j] = SHARK;
                    }
                    else{
                        tempArray[i + 1][j] = SHARK;
                    }
                    tempArray[i][j] = EMPTY;
                    break;

PS:请考虑代码缩进。

© www.soinside.com 2019 - 2024. All rights reserved.