Пример #1
0
        private ArbolGeneral <int> crearArbol(List <ArbolGeneral <int> > arbolesI, List <ArbolGeneral <int> > arbolesH, ArbolGeneral <int> arbol, bool turno)
        {
            turno = !turno;                  // cada llamada a crearArbol cambiara el turno de cartas a usar en el algoritmo
            List <ArbolGeneral <int> > arboles;

            if (turno == true)
            {
                arboles = arbolesH;
            }
            else
            {
                arboles = arbolesI;
            }
            foreach (ArbolGeneral <int> x in arboles)
            {
                //cada arbol que no este visitado, se clonara y se agregara como hijo del arbol pasado
                //por parametro. luego se marcara como visitado para ir descartando en futuras llamadas
                //recursivas.

                if (x.estadoVisitado() == false)
                {
                    ArbolGeneral <int> nuevoArbol = new ArbolGeneral <int>(x.getDatoRaiz());
                    arbol.agregarHijo(nuevoArbol);
                    x.visitarRaiz();
                    crearArbol(arbolesI, arbolesH, nuevoArbol, turno);
                    x.desvisitarRaiz();
                }
            }
            return(arbol);
        }
Пример #2
0
        public override int descartarUnaCarta()
        {
            //busca en los hijos del arbol el estado "gana IA" y elige esa carta
            int carta = arbol.getHijos()[0].getDatoRaiz();

            foreach (ArbolGeneral <int> x in arbol.getHijos())
            {
                string ganar = x.estadoGana();
                if (ganar == "gana IA")
                {
                    carta = x.getDatoRaiz();
                }
            }
            //elige el camino del arbol que posee la carta elegida previamente
            foreach (ArbolGeneral <int> x in arbol.getHijos())
            {
                if (x.getDatoRaiz() == carta)
                {
                    arbol = x;
                }
            }
            // imprime y retorna la carta
            Console.WriteLine("Naipe elegido por la Computadora: " + carta);
            return(carta);
        }
Пример #3
0
 public override void cartaDelOponente(int carta)
 {
     //busca en los hijos del arbol, la carta jugada por el usuario y ese subarbol sera el nuevo
     //arbol del computer player asi tomando ese camino
     foreach (ArbolGeneral <int> x in this.arbol.getHijos())
     {
         int dato = x.getDatoRaiz();
         if (dato == carta)
         {
             arbol = x;
         }
     }
 }
Пример #4
0
        public void porNiveles()
        {
            Cola <ArbolGeneral <T> > cola = new Cola <ArbolGeneral <T> >();

            cola.encolar(this);
            while (!cola.esVacia())
            {
                ArbolGeneral <T> dato = cola.desencolar();
                Console.WriteLine(dato.getDatoRaiz() + dato.estadoGana());
                foreach (ArbolGeneral <T> x in dato.getHijos())
                {
                    cola.encolar(x);
                }
            }
        }
Пример #5
0
        public override void  incializar(List <int> cartasPropias, List <int> cartasOponente, int limite)
        {
            // crea listas de arboles a partir de las cartas propias y del oponente
            // para luego pasarlas por parametro a la funcion crearArbol()

            List <ArbolGeneral <int> > arbolesIA     = new List <ArbolGeneral <int> >();
            List <ArbolGeneral <int> > arbolesHumano = new List <ArbolGeneral <int> >();

            foreach (int x in cartasPropias)
            {
                ArbolGeneral <int> nuevoArbol = new ArbolGeneral <int>(x);
                arbolesIA.Add(nuevoArbol);
            }
            foreach (int x in cartasOponente)
            {
                ArbolGeneral <int> nuevoArbol = new ArbolGeneral <int>(x);
                arbolesHumano.Add(nuevoArbol);
            }

            arbol = crearArbol(arbolesIA, arbolesHumano, new ArbolGeneral <int>(0), false);
            funcionEuristica(arbol, limite, -1);
        }
Пример #6
0
 public void eliminarHijo(ArbolGeneral <T> hijo)
 {
     this.raiz.getHijos().Remove(hijo.getRaiz());
 }
Пример #7
0
 public void agregarHijo(ArbolGeneral <T> hijo)
 {
     this.raiz.getHijos().Add(hijo.getRaiz());
 }
Пример #8
0
        private void funcionEuristica(ArbolGeneral <int> arbolminmax, int limit, int turno)
        {
            // turno ira turnando al IA y al usuario. si turno es par, es turno de IA. impar para el usuario

            turno++;
            int dato = arbolminmax.getDatoRaiz();

            limit = limit - dato;
            if (limit < 0)
            {
                if (turno % 2 == 0)
                {
                    arbolminmax.sePierde();
                }
                else
                {
                    arbolminmax.seGana();
                }
            }
            else
            {
                // si es turno de IA, entonces la funcion euristica minimiza, si es turno del usuario maximiza
                // por defecto si es turno de IA, se implementa que gana IA a menos que haya un solo resultado
                // negativo obtenido de la recursion, entonces se pone en el arbol que pierde (minimizar).
                // lo contrario con el turno del usuario.

                string decide = "";
                if (turno % 2 == 0)
                {
                    decide = "gana IA";
                }
                else
                {
                    decide = "pierde IA";
                }
                foreach (ArbolGeneral <int> x in arbolminmax.getHijos())
                {
                    funcionEuristica(x, limit, turno);
                    string ganador = x.estadoGana();
                    if (turno % 2 == 0)
                    {
                        if (ganador == "pierde IA")
                        {
                            decide = "pierde IA";
                        }
                    }
                    else
                    {
                        if (ganador == "gana IA")
                        {
                            decide = "gana IA";
                        }
                    }
                }
                if (decide == "gana IA")
                {
                    arbolminmax.seGana();
                }
                else
                {
                    arbolminmax.sePierde();
                }
            }
        }