Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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();
        }