2016-10-21 26 views
1

第一篇文章在這裏。我正在創建一個3D tic-tac-toe C++程序。我的checkWin成員函數導致問題。我很好奇爲什麼當if語句被滿足但測試柱和對角線對於layer0工作正常時,爲什麼嵌套for循環的測試行不會獲勝。由於3D陣列和成員函數來檢查贏家到3D井字遊戲

void TicTacToe::checkWin(void) { 
char returnValue = ' '; 
//test for X or O win 
//test rows, does not work 
for (int k=0; k<=2; k++){ 
    for (int i=0; i<=2; i++){ 
     if ((space[i][0][k] == space[i][1][k]) && (space[i][0][k] == space[i][2][k])){ 
      returnValue = space[i][0][k]; 
     } 
    } 
} 
int k=0; //test layer 0 only 
//test columns 
if ((space[0][0][k] == space[1][0][k]) && (space[0][0][k] == space[2][0][k])) 
    returnValue = space[0][0][k]; 
else if ((space[0][1][k] == space[1][1][k]) && (space[0][1][k] == space[2][1][k])) 
    returnValue = space[0][1][k]; 
else if ((space[0][2][k] == space[1][2][k]) && (space[0][2][k] == space[2][2][k])) 
    returnValue = space[0][2][k]; 


//test diagonals 
else if ((space[0][0][k] == space[1][1][k]) && (space[0][0][k] == space[2][2][k])) 
    returnValue = space[0][0][k]; 
else if ((space[0][2][k] == space[1][1][k]) && (space[0][2][k] == space[2][0][k])) 
    returnValue = space[0][2][k]; 

if (returnValue == ' ') { //then test for cat 
    int i, j, k, catCheck=0; 
    for (i=0; i<=2; i++) { 
     for (j=0; j<=2; j++) { 
      for (k=0; k<=2; k++) { 
       if (space[i][j][k] == ' ') 
       catCheck++; 
      } 
     } 
    } 
    if (catCheck == 0) 
     returnValue = 'C'; 
} 

winner = returnValue; 

}

回答

0

可能是因爲你應該跳出這個循環的,當你發現一個贏家(三個等於海誓山盟,但不等於'「)。即使您先找到贏家,如果在此之後出現三個空集,它將滿足條件但將空白存儲在返回值中,覆蓋先前找到的獲獎x或o。或者你可以在那裏添加... != ' '到你的病情,因爲你真的不在乎這三個人是否都是空的。通過調試器或添加臨時診斷打印輸出可以真正幫助你。

只是一個猜測一眼。

+0

嗯,我不是故意這樣,但無論如何。觸摸屏上的胖手指。 –