Implementar o Loop Principal do Jogo
Escreva o loop principal do jogo para permitir que os jogadores se revezem e interajam com o jogo.
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;
}
Chame a função initializeBoard para inicializar o tabuleiro do jogo, definindo todos os quadrados como espaços.
Crie uma variável inteira currentPlayer para controlar de quem é a vez. A configuração inicial é 1, indicando o jogador 1.
No loop principal while (1):
- Chame a função
clearScreen para limpar a tela para que a exibição seja atualizada após cada turno.
- Chame a função
printBoard para imprimir o tabuleiro atual do jogo.
Entrada do jogador: Solicita ao jogador atual que insira as coordenadas da linha e da coluna por meio da função scanf, por exemplo, Player 1, please enter a row and column (e.g., 1 2):. Se a entrada for inválida (não dois inteiros), a mensagem Invalid input, please try again: é exibida e o buffer de entrada é limpo até que uma entrada válida seja obtida.
Validação da entrada: Em seguida, verifique se as coordenadas da linha e da coluna inseridas são válidas (em uma escala de 1 a 3) e se a posição selecionada é um espaço. Se a entrada for inválida ou o local selecionado já estiver ocupado, a mensagem Invalid move, please try again. é exibida e o jogador é solicitado a reinserir.
Jogada: Se a entrada for válida, o código coloca um X ou um O na posição correspondente no tabuleiro do jogo com base no jogador atual (1 ou 2).
Detecção do fim do jogo: O código então chama a função isGameOver() para verificar se o jogo acabou. Se o jogo terminar, a tela limpa e uma mensagem de que o jogo acabou é exibida, incluindo um vencedor (se houver) ou um empate.
Resultado do jogo: Se houver um vencedor, o código dirá Player X wins! ou Player O wins!, dependendo de qual jogador é o vencedor. Se não houver vencedor, o código dirá It's a draw! indicando um empate.