У меня возникли проблемы с этим кодом C++ при создании программы, имитирующей игру в крестики-нолики. Игра проходит «нормально», отображает победителя, проверяет ввод и т. д., но если игрок «X» выигрывает, игроку «O» по-прежнему разрешается сделать еще один ход до объявления победителя.
do
{
int turn = 0;
if (turn % 2 == 0)
{
cout << "Player X, Row and Column: ";
cin >> row >> column;
while (array[(row-1)][(column-1)] != '*')
{
cout << "Invalid move try again \n";
cout << "Player X, Row and Column: ";
cin >> row >> column;
}
array[row-1][column-1] = 'X';
showArray(array);
results = checkWin(array);
}
if (turn % 2 != 0)
{
cout << "Player O, Row and Column: ";
cin >> row >> column;
while (array[row-1][column-1] != '*')
{
cout << "Invalid move try again \n";
cout << "Player O, Row and Column: ";
cin >> row >> column;
}
array[row-1][column-1] = 'O';
showArray(array);
results = checkWin(array);
}
turn++;
}while (results == 0);
Я использую цикл do-while, который поочередно переключает двух игроков. Когда я помещаю увеличивающийся 'turn++;' вне обоих блоков if, программа позволяет двигаться только игроку «X». Когда я помещаю 'turn++;' оператор внутри плеера 'X' if block, он чередуется, но я сталкиваюсь с проблемой, описанной выше. Если у вас есть какие-либо предложения, пожалуйста, дайте их. Спасибо.
Где условие розыгрыша?
Прочтите ericlippert.com/2014/03/05/how-to-debug-small-programs, чтобы получить несколько советов по отладке вашей программы.