#include <stdio.h>
char board[3][3]; // Tablero de juego
char player = 'X'; // Jugador humano
char computer = 'O'; // Jugador computadora
// Función para inicializar el tablero
void initializeBoard() {
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
board[i][j] = ' ';
}
// Función para mostrar el tablero
void displayBoard() {
printf(" %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
printf("---|---|---\n");
printf(" %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
printf("---|---|---\n");
printf(" %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);
}
// Función para verificar si hay un ganador
int checkWinner(char mark) {
for (int i = 0; i < 3; i++)
if ((board[i][0] == mark && board[i][1] == mark && board[i][2] == mark) ||
(board[0][i] == mark && board[1][i] == mark && board[2][i] == mark))
return 1;
if ((board[0][0] == mark && board[1][1] == mark && board[2][2] == mark) ||
(board[0][2] == mark && board[1][1] == mark && board[2][0] == mark))
return 1;
return 0;
}
// Función para que la computadora haga su movimiento
void computerMove() {
// Estrategiasimple: bloquear al jugador o ganar
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == ' ') {
board[i][j] = computer;
if (checkWinner(computer)) return; // Gana
board[i][j] = ' '; // Deshacer movimiento
}
}
}
// Si no puede ganar, bloquear al jugador
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (board[i][j] == ' ') {
board[i][j] = player;
if (checkWinner(player)) {
board[i][j] = computer; // Bloquear
return;
}
board[i][j] = ' '; // Deshacer movimiento
}
}
}
// Si no hay amenazas, hacer un movimiento aleatorio
while (1) {
int i = rand() % 3;
int j = rand() % 3;
if (board[i][j] == ' ') {
board[i][j] = computer;
return;
}
}
}
int main() {
initializeBoard();
while (1) {
displayBoard();
int row, col;
printf("Ingresa tu movimiento (fila y columna): ");
scanf("%d %d", &row, &col);
if (board[row][col] == ' ') {
board[row][col] = player;
if (checkWinner(player)) {
displayBoard();
printf("¡Ganaste!\n");
break;
}
computerMove();
if (checkWinner(computer)) {
displayBoard();
printf("La computadora ganó.\n");
break;
}
} else {
printf("Movimiento inválido. Intenta de nuevo.\n");
}
}
return 0;
}