我用do.while做了一个循环,试图改变游戏的变化。现在,当两个阵列中的任何一个都变为0时,我想要阻止它,并显示胜利者。这是一场战舰游戏。
do{ for(int k;toc=1;k++){
objec1();
if(toc!=1)
break;
}
for(int k;toc2=1;k++){
objec2();
if(toc2!=1){
break;
}
}
if(jug1[i][j]==0){ //Here is where the loop must stop
correct1=true;
cout<<"\n\tEl The player 2 is the winner\n";
}
if(jug2[i][j]==0){
correct1=true;
cout<<"\n\tPlayer 1 is the winner \n";
}
} while(!correct1);
在我拥有代码的方式中,它不会在必须时停止循环。现在,我想检查一个数组是否满0,停止循环,更改标志并显示获胜者。原始代码更加宽容。考虑一切都已正确初始化。
答案 0 :(得分:1)
首先,如果您修复格式,将功能分解为函数并使用更好的变量名称,我认为您可以更轻松地解决问题。目前很难阅读和理解。
其次,您所谈论的操作非常昂贵。如果你能避免以这种方式进行检查,那就更好了。例如,保持非零条目的计数,而是将其用作检查条件。或者,如果您有关于哪些战列舰正在发挥作用的信息,请检查何时没有留下任何战列舰。
无论如何,这里有一个函数来找出“当[二维]数组满0时”。你可以从另一个函数调用它。
/**
* array is a 2-d array used by Battleship game
* i is the outer array size
* j is the inner array size
*/
bool isAllZeros(int **array, int i, int j) {
for (int m = 0; m < i; m++) {
for (int n = 0; n < j; n++) {
if (0 != array[i][j]) {
return false;
}
}
}
return true;
}
答案 1 :(得分:1)
你没有在你的forloops中初始化k
并且你没有给他们可以实现的停止条件:
for(int k;toc=1;k++)
第二个相同:
for(int k;toc2=1;k++)