Movimiento MovimientoClaras(EstadoDeJuego estado) { List <Movimiento> movimientos = Juego.IA.CalcularMovimientosPorColorEnEstado(Juego.color.Claro, estado); Movimiento mejorMov = new Movimiento(Juego.color.Claro); int mejorValor = 999; Debug.Log("Cantidad de movimientos a calcular " + movimientos.Count); foreach (Movimiento mov in movimientos) { //DarValorDeEstado (mov); //if(mov.Valor != 1) Debug.Log("Valor de movimiento blancas " + mov.Valor); //mejorMov = Min (mejorMov, mov); if (mov.Valor < mejorValor) { mejorMov = mov; mejorValor = mov.Valor; } //Debug.Log ("Valor de estado " + mejorMov.estadoFinal.ValorDeEstado); } //Debug.Log("Mejor valor blanca " + mejorMov.Valor); return(mejorMov); }
public Movimiento MiniMax(int Profundidad, EstadoDeJuego estado, bool esMaximo) { if (Profundidad == 0) { if (estado.Turno == true) //blancas { Movimiento mov = MovimientoClaras(estado); Debug.Log("Fin minimax"); return(mov); } else //juegam megram { } } if (esMaximo) { Movimiento mejorMov = new Movimiento(Juego.color.Oscuro); int mejor = -999; foreach (Movimiento mov in ListaDeMovimientosParaCalcular) { //DarValorDeEstado (mov); mov.estadoFinal.Turno = true; //juegan blancas //Movimiento me = MiniMax (Profundidad - 1, mov.estadoFinal, !esMaximo); Debug.Log("Se va calcular movimiento desde estado blancas"); //Debug.Log("Cantidad de piezas en el estado a calcular " + mov.estadoFinal.IdsActivosPiezasClaras.Count); //Debug.Log("Cantidad casillas de estado " + mov.estadoFinal.CasillasDeEstado.Count); //mov.estadoFinal.LogCantidadCasillasOcupadas(); Movimiento mejorMovBlanca = MovimientoClaras(mov.estadoFinal); Debug.Log("Mejor valor blancas" + mejorMovBlanca.Valor); //Debug.Log("Valor mov negra " + mov.estadoFinal.ValorDeEstado); //mejorMov = Max (mejorMov, me); if (mov.Valor > mejor) { mejorMov = mov; mejor = mov.Valor; } } Debug.Log("Mejor mov negras " + mejorMov.Valor); Debug.Log("se creo un arbol para negras"); return(mejorMov); } else { List <Movimiento> movimientos = Juego.IA.CalcularMovimientosPorColorEnEstado(Juego.color.Claro, estado); Movimiento mejorMov = new Movimiento(Juego.color.Claro); foreach (Movimiento mov in movimientos) { mov.estadoFinal.Turno = false; //juegan negras Movimiento moviVal = MiniMax(Profundidad - 1, mov.estadoFinal, !esMaximo); mejorMov = Min(mejorMov, moviVal); } Debug.Log("Se creo un arbol par ablancas"); return(mejorMov); } }
Movimiento CrearUnMovimiento (EstadoDeJuego estado) { Juego.Pieza pieza = Partida.ListaDePiezas[0]; Juego.Casilla casilla = Partida.ListaDeCasillas[1]; Movimiento movimientoUno = new Movimiento (pieza, casilla, estado); return movimientoUno; }