2016-01-16 43 views
0

我做了一个循环与do.while,试图使游戏的变化轮流。现在,当两个数组中的任何一个都变为0时,我想停止它,并显示赢家。这是一个战舰游戏。比较一个二维数组与0(C++)

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,停止循环,更改标志并显示赢家。原始代码更加激烈。考虑一切正确初始化。

+1

请理清缩进 –

回答

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; 
} 
+0

谢谢!我是西班牙语的演讲者,所以也许我在这里表达自己的方式并不好。抱歉,这是我的第一个问题。我知道我没有以最正确的方式做到这一点。但无论如何,你的回答给了我很多帮助。谢谢,我非常感谢你的帮助。 –

+0

真棒,很高兴它有帮助 - 与游戏祝你好运! – Jameson

1

你不初始化您forloops k,你不给他们实现的停止条件:

for(int k;toc=1;k++) 

同为第二:

for(int k;toc2=1;k++) 
+0

原始代码更加激烈。考虑一切正确初始化。比您的问题不是[完整] –

+1

(https://stackoverflow.com/help/mcve) –