Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created May 21, 2021 18:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/a4608070e3fdc624d3f7b7dd227a8033 to your computer and use it in GitHub Desktop.
Save parzibyte/a4608070e3fdc624d3f7b7dd227a8033 to your computer and use it in GitHub Desktop.
// Hace que el CPU elija unas coordenadas para ganar
static int[] elegirCoordenadasCpu(char jugador, char[][] tablero) {
hablar("Estoy pensando...", jugador);
/*
El orden en el que el CPU infiere las coordenadas que toma es:
1. Ganar si se puede
2. Hacer perder al oponente si está a punto de ganar
3. Tomar el mejor movimiento del oponente (en donde obtiene el mayor puntaje)
4. Tomar mi mejor movimiento (en donde obtengo mayor puntaje)
5. Elegir la de la esquina superior izquierda (0,0)
6. Coordenadas aleatorias
*/
int y, x, conteoJugador, conteoOponente;
int yOponente, xOponente;
int[] coordenadas = new int[2];
char oponente = oponenteDe(jugador);
// 1
coordenadas = coordenadasParaGanar(jugador, tablero);
x = coordenadas[0];
y = coordenadas[1];
if (y != -1 && x != -1) {
hablar("Ganar", jugador);
return new int[]{x, y};
}
// 2
coordenadas = coordenadasParaGanar(oponente, tablero);
x = coordenadas[0];
y = coordenadas[1];
if (y != -1 && x != -1) {
hablar("Tomar victoria de oponente", jugador);
return new int[]{x, y};
}
// 3
int[] coordenadasJugador = coordenadasParaMayorPuntaje(jugador, tablero);
int[] coordenadasOponente = coordenadasParaMayorPuntaje(oponente, tablero);
conteoJugador = coordenadasJugador[0];
x = coordenadasJugador[1];
y = coordenadasJugador[2];
conteoOponente = coordenadasOponente[0];
xOponente = coordenadasOponente[1];
yOponente = coordenadasOponente[2];
if (conteoOponente > conteoJugador) {
hablar("Tomar puntaje mayor del oponente", jugador);
return new int[]{xOponente, yOponente};
} else if (conteoJugador > 0) {
hablar("Tomar mi mayor puntaje", jugador);
return new int[]{x, y};
}
// 4
if (coordenadasVacias(0, 0, tablero)) {
hablar("Tomar columna superior izquierda", jugador);
return new int[]{0, 0};
}
// 5
hablar("Coordenadas aleatorias", jugador);
coordenadas = obtenerCoordenadasAleatorias(jugador, tablero);
return coordenadas;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment