Реализация основного игрового цикла
Напишите основной игровой цикл, чтобы игроки могли по очереди делать ходы и взаимодействовать с игрой.
int main() {
initializeBoard();
int currentPlayer = 1;
while (1) {
clearScreen();
printf("Current board state:\n");
printBoard();
int row, col;
printf("Player %d, please enter a row and column (e.g., 1 2):", currentPlayer);
while (scanf("%d %d", &row, &col)!= 2) {
printf("Invalid input, please try again: ");
while (getchar()!= '\n');
}
if (row < 1 || row > 3 || col < 1 || col > 3 || board[row - 1][col - 1]!= ' ') {
printf("Invalid move, please try again.\n");
} else {
if (currentPlayer == 1) {
board[row - 1][col - 1] = 'X';
currentPlayer = 2;
} else {
board[row - 1][col - 1] = 'O';
currentPlayer = 1;
}
}
if (isGameOver()) {
clearScreen();
printf("Game over!\n");
printBoard();
char winner = getWinner();
if (winner!= ' ') {
printf("Player %c wins!\n", winner);
} else {
printf("It's a draw!\n");
}
break;
}
}
return 0;
}
Вызовите функцию initializeBoard
для инициализации игрового поля, установив все клетки в пробелы.
Создайте целочисленную переменную currentPlayer
, чтобы отслеживать, чей сейчас ход. Изначально она установлена в 1, что означает игрока 1.
В основном цикле while (1)
:
- Вызовите функцию
clearScreen
для очистки экрана, чтобы экран обновлялся после каждого хода.
- Вызовите функцию
printBoard
для вывода текущего состояния игрового поля.
Ввод игрока: Предложите текущему игроку ввести координаты строки и столбца с помощью функции scanf
, например, Player 1, please enter a row and column (e.g., 1 2):
. Если ввод некорректен (не два целых числа), выводится сообщение Invalid input, please try again:
, и буфер ввода очищается до тех пор, пока не будет получен корректный ввод.
Проверка ввода: Затем проверьте, что введенные координаты строки и столбца корректны (в диапазоне от 1 до 3) и что выбранная позиция является пустой. Если ввод некорректен или выбранная позиция уже занята, выводится сообщение Invalid move, please try again.
, и игроку предлагается ввести данные снова.
Ход: Если ввод корректен, код ставит X
или O
в соответствующую позицию на игровом поле в зависимости от текущего игрока (1 или 2).
Проверка окончания игры: Затем код вызывает функцию isGameOver()
, чтобы проверить, закончилась ли игра. Если игра закончилась, экран очищается, и выводится сообщение о конце игры, включая победителя (если он есть) или ничью.
Результат игры: Если есть победитель, код выведет Player X wins!
или Player O wins!
, в зависимости от того, какой игрок победил. Если победителя нет, код выведет It's a draw!
, что означает ничью.