Implementar el bucle principal del juego
Escribe el bucle principal del juego para permitir a los jugadores tomar turnos e interactuar con el juego.
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;
}
Llama a la función initializeBoard para inicializar el tablero de juego, estableciendo todas las casillas en espacios.
Crea una variable entera currentPlayer para llevar un registro de de quién es el turno. La configuración inicial es 1, lo que indica el jugador 1.
En el bucle principal while (1):
- Llama a la función
clearScreen para limpiar la pantalla, de modo que la pantalla se actualice después de cada turno.
- Llama a la función
printBoard para imprimir el tablero de juego actual.
Entrada del jugador: Solicita al jugador actual que ingrese las coordenadas de fila y columna a través de la función scanf, por ejemplo, Player 1, please enter a row and column (e.g., 1 2):. Si la entrada es inválida (no son dos enteros), se muestra el mensaje Invalid input, please try again: y se limpia el buffer de entrada hasta obtener una entrada válida.
Validación de entrada: Luego, se comprueba que las coordenadas de fila y columna ingresadas sean válidas (en un rango de 1 a 3) y que la posición seleccionada sea un espacio. Si la entrada es inválida o la ubicación seleccionada ya está ocupada, se muestra el mensaje Invalid move, please try again. y se pide al jugador que ingrese de nuevo.
Colocar ficha: Si la entrada es válida, el código coloca una X o una O en la posición correspondiente del tablero de juego según el jugador actual (1 o 2).
Detección del fin del juego: Luego, el código llama a la función isGameOver() para comprobar si el juego ha terminado. Si el juego termina, se limpia la pantalla y se muestra un mensaje de que el juego ha terminado, incluyendo el ganador (si lo hay) o un empate.
Resultado del juego: Si hay un ganador, el código mostrará Player X wins! o Player O wins!, dependiendo de qué jugador sea el ganador. Si no hay ganador, el código mostrará It's a draw! para indicar un empate.