2016-10-21 5 views
1

ここに最初の投稿私は3D tic-tac-toe C++プログラムを作成しています。私のcheckWinメンバー関数が問題を引き起こしています。 if文が満たされても、テスト列と対角線がlayer0に対してうまく動作するときに、ループ用にネストされたテスト行が勝者を与えない理由が不思議です。おそらくおかげ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

あなたが(すべての3つは、お互いに等しいが、 '「と等しくない)勝者を見つけたとき、あなたはそのループから抜け出す必要がありますので。あなたが勝者を最初に見つけたとしても、その後に3つの空のセットが発生した場合、それは条件を満たしますが、以前に見つかったxまたはoを上書きして返却値に空白を格納します。または、その時点で3つがすべて空であれば本当に気にしないので、... != ' 'をそこに追加することができます。デバッガを踏んだり、一時的な診断出力を追加したりすると、ここで本当に役に立ちます。

一見してみてください。

+0

私はそれをcwに意味しませんでしたが、何でも。タッチスクリーン上の脂肪指。 –

関連する問題