public Movimiento Min(Tablero nodo, int altura, int distancia) { if (altura == distancia || nodo.Ganador != 0) { Movimiento m = new Movimiento(); m.Value = nodo.CalcularValor(-1); return(m); } else { Movimiento menor = new Movimiento(); menor.Value = int.MaxValue; List <Movimiento> m = nodo.Movimientos(-1); if (m.Count == 0) { m = nodo.Mov(-1); } foreach (Movimiento mov in m) { Tablero clon = new Tablero(); clon.Tabla = (sbyte[, ])nodo.Tabla.Clone(); clon.jugar(mov.XLast, mov.YLast, mov.X, mov.Y, -1, mov.Points); Movimiento tmp = Max(clon, altura, distancia + 1); if (tmp.Value < menor.Value) { menor.Value = tmp.Value; menor.X = mov.X; menor.Y = mov.Y; menor.XLast = mov.XLast; menor.YLast = mov.YLast; menor.Points = mov.Points; } } return(menor); } }
public Movimiento Minimax(Tablero nodo, int altura) { Movimiento mejor = new Movimiento(); mejor.Value = int.MinValue; foreach (Movimiento mov in nodo.Movimientos(1)) { Tablero clon = new Tablero(); clon.Tabla = (sbyte[, ])nodo.Tabla.Clone(); clon.jugar(mov.XLast, mov.YLast, mov.X, mov.Y, 1, mov.Points); Movimiento tmp = Min(clon, altura, 0); if (tmp.Value > mejor.Value) { mejor.Value = tmp.Value; mejor.X = mov.X; mejor.Y = mov.Y; mejor.XLast = mov.XLast; mejor.YLast = mov.YLast; mejor.Points = mov.Points; } } return(mejor); }
public void JugarComputadora() { VerificarEstado(); if (Tablero.Movimientos(1).Count > 0) { Movimiento m = Minimax(Tablero, 6); Tablero.jugar(m.XLast, m.YLast, m.X, m.Y, 1, m.Points); if (JuegoRealizado != null) { JuegoRealizado(m.XLast, m.YLast, m.X, m.Y, 1, m.Points); } VerificarEstado(); if (m.X == 7) { Convertir(m.X, m.Y, 1); } } CambiarTurno(); }