Algoritmo Minimax con Poda en Java: Implementación de Estados para el Juego de Othello

Informática y Telecomunicaciones2,11 KB

private static MiEstado maxValor(MiEstado e, int limite) {

nodosExplorados++;

if (limite == 0 || e.esFinal()) {

e.setMinMax(e.getUtilidad());

return e;

}

MiEstado r = null;

for (int i = 0; i < 8; i++) {

for (int j = 0; j < 8; j++) {

MiEstado sucesor = (MiEstado) e.getSucesor(i, j, Jugador.MAX);

if (sucesor != null) {

MiEstado m = minValor(sucesor, limite - 1);

if (m != null && (r == null || r.getMinMax() < m.getMinMax())) {

r = sucesor;

r.setMinMax(m.getMinMax());

}

}

}

}

return r;

}

Constructor de copia de MiEstado

public MiEstado(Estado e) {

for (int x = 0; x < this.dimension; x++) {

for (int y = 0; y < this.dimension; y++) {

this.tablero[x][y] = e.getFicha(x, y);

}

}

}

Generación de sucesores

public Estado getSucesor(int i, int j, Jugador jugador) {

if (tablero[i][j] != null) {

return null;

}

Jugador contrario = jugador == Jugador.MAX ? Jugador.MIN : Jugador.MAX;

MiEstado sucesor = null;

int adi[] = { -1, -1, -1, 0, 1, 1, 1, 0 };

int adj[] = { -1, 0, 1, 1, 1, 0, -1, -1 };

for (int d = 0; d < adi.length; d++) {

int di = adi[d];

int dj = adj[d];

int idi = i + di;

int jdj = j + dj;

if (idi < 0 || jdj < 0 || idi > 7 || jdj > 7) {

continue;

}

if (tablero[idi][jdj] == contrario) {

for (int n = 2; n < dimension; n++) {

int ni = i + n * di;

int nj = j + n * dj;

if (ni < 0 || nj < 0 || ni > 7 || nj > 7 || tablero[ni][nj] == null) {

break;

}

if (tablero[ni][nj] == jugador) {

if (sucesor == null) {

sucesor = new MiEstado(this);

}

for (int v = 0; v < n; v++) {

sucesor.tablero[i + v * di][j + v * dj] = jugador;

}

break;

}

}

}

}

return sucesor;

}

Descargar

PDF Word HTML