我目前正在尝试在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];
}
}
}
}
从而结束我的问题。我不知道如何返回并删除特定案例。希望我能很好地解释我的问题,因为我对编码仍然很新。
像这样设计你的代码。有一个额外的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:请考虑代码缩进。