2016-10-21 5 views
1

первое сообщение здесь. Я создаю трехмерную программу tic-tac-toe C++. Моя функция-член checkWin вызывает проблемы. Мне любопытно, почему тестовые строки, вложенные в циклы, не дают победителя, если оператор if удовлетворен, но тестовые столбцы и диагонали отлично работают для layer0. Благодаря3D-массивы и функции-члены для проверки победителя 3D-tic-tac-toe

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

Вероятно потому, что вы должны выйти из этого цикла, когда вы нашли победителя (все три равные с Афоризм, но не равным ' «). Даже если вы сначала найдете победителя, если после этого получится пустой набор из трех, он удовлетворяет условию, но сохраняет пробел в returnvalue, перезаписав ранее найденный выигрыш x или o. Или вы можете добавить ... != ' ' к своему состоянию, потому что вам действительно все равно, если все три пустые в этой точке. Переход через отладчик или добавление временных отпечатков диагностики может действительно помочь вам здесь.

Просто догадайтесь.

+0

Ну, я не хотел, чтобы это было, но что бы это ни было. Толстые пальцы на сенсорном экране. –