Example #1
0
 public List <Planeta> CaminoPreOrden(ArbolGeneral <Planeta> arbol, List <Planeta> camino)
 {
     // Primero raiz
     camino.Add(arbol.getDatoRaiz());
     // si encontramos camino
     if (arbol.getDatoRaiz().EsPlanetaDeLaIA())
     {
         return(camino);
     }
     else
     {
         //hijos recursivo...
         foreach (var hijo in arbol.getHijos())
         {
             List <Planeta> caminoAux = CaminoPreOrden(hijo, camino);
             if (caminoAux != null)
             {
                 return(caminoAux);
             }
             //saco ultimo planeta del camino
             camino.Remove(hijo.getDatoRaiz());
         }
     }
     return(null);
 }
Example #2
0
        public String Consulta3(ArbolGeneral <Planeta> arbol)
        {
            // calcular  promedio poblacion por nivel de arbol (recorrido por niveles, sumar en total y cantidad y dividir por cantidad para sacar promedio)
            Cola <ArbolGeneral <Planeta> > c = new Cola <ArbolGeneral <Planeta> >();
            uint Conta1 = 0;
            uint Conta2 = 0;
            uint Conta3 = 0;
            uint Conta4 = 0;
            uint nivel1 = 0;
            uint nivel2 = 0;
            uint nivel3 = 0;
            uint nivel4 = 0;

            c.encolar(arbol);

            while (!c.esVacia())
            {
                arbol = c.desencolar();
                int conta = arbol.nivel(arbol.getDatoRaiz());
                if (conta == 1)
                {
                    nivel1 += arbol.getDatoRaiz().population;
                    Conta1++;
                }
                else if (conta == 2)
                {
                    nivel2 += arbol.getDatoRaiz().population;
                    Conta2++;
                }
                else if (conta == 3)
                {
                    nivel3 += arbol.getDatoRaiz().population;
                    Conta3++;
                }
                else
                {
                    nivel4 += arbol.getDatoRaiz().population;
                    Conta4++;
                }
                foreach (var hijo in arbol.getHijos())
                {
                    c.encolar(hijo);
                }
            }
            nivel1 /= Conta1;
            nivel2 /= Conta2;
            nivel3 /= Conta3;
            nivel4 /= Conta4;
            return($"\r\n\r\n\r\n\r\n\r\n\r\nPromedio de poblacion segun nivel:\r\n" +
                   $"nivel 1: {nivel1}\r\n" +
                   $"nivel 2: {nivel2}\r\n" +
                   $"nivel 3: {nivel3}\r\n" +
                   $"nivel 4: {nivel4}\r\n");
        }
Example #3
0
        public String Consulta2(ArbolGeneral <Planeta> arbol)
        {
            Cola <ArbolGeneral <Planeta> > c = new Cola <ArbolGeneral <Planeta> >();
            uint nivel1 = 0;
            uint nivel2 = 0;
            uint nivel3 = 0;
            uint nivel4 = 0;

            c.encolar(arbol);
            while (!c.esVacia())
            {
                arbol = c.desencolar();
                int conta = arbol.nivel(arbol.getDatoRaiz());
                if (arbol.getDatoRaiz().population > 10)
                {
                    if (conta == 1)
                    {
                        nivel1++;
                    }
                    else if (conta == 2)
                    {
                        nivel2++;
                    }
                    else if (conta == 3)
                    {
                        nivel3++;
                    }
                    else
                    {
                        nivel4++;
                    }
                }
                foreach (var hijo in arbol.getHijos())
                {
                    c.encolar(hijo);
                }
            }



            //calcular cantidad de planetas con poblaciĆ³n > 10 en cada nivel del arbol (recorrido por niveles,con limitante de poblaciĆ³n)

            return($"\r\nCantidad de planetas con poblacion mayor a 10 segun nivel:\r\n" +
                   $"nivel 1: {nivel1}\r\n" +
                   $"nivel 2: {nivel2}\r\n" +
                   $"nivel 3: {nivel3}\r\n" +
                   $"nivel 4: {nivel4}\r\n");
        }
Example #4
0
        public int Distancia_Raiz(ArbolGeneral <Planeta> arbol)
        {
            if (arbol.getDatoRaiz().EsPlanetaDeLaIA())
            {
                return(0);
            }
            else
            {
                int nivel = 1;
                List <ArbolGeneral <Planeta> > Lista_hijos = arbol.getHijos();
                List <ArbolGeneral <Planeta> > Siguiente_nivel_hijos;
                do
                {
                    //lista vacia que tendra los nodos por nivel
                    Siguiente_nivel_hijos = new List <ArbolGeneral <Planeta> >();

                    foreach (ArbolGeneral <Planeta> Obtener_hijo in Lista_hijos)
                    {   //cuando encuentro un nodo que es ia retorno el nivel
                        if (Obtener_hijo.getDatoRaiz().EsPlanetaDeLaIA())
                        {
                            return(nivel);
                        }
                        //obtengo los hijos del nodo obtener hijos y lo agrego a la lista de nodos que tiene siguiente nivel
                        foreach (ArbolGeneral <Planeta> hijo in Obtener_hijo.getHijos())
                        {
                            Siguiente_nivel_hijos.Add(hijo);
                        }
                    }
                    Lista_hijos = Siguiente_nivel_hijos;
                    nivel++;
                } while (Siguiente_nivel_hijos.Count > 0);
                //-1 si no esta el dato
                return(-1);
            }
        }
Example #5
0
        public String Consulta1(ArbolGeneral <Planeta> arbol)         //Recorrido por niveles
        {
            Cola <ArbolGeneral <Planeta> > q = new Cola <ArbolGeneral <Planeta> >();

            q.encolar(arbol);
            int nivel = 0;

            while (!q.esVacia())
            {
                int elementos = q.cantElementos();
                nivel++;
                while (elementos-- > 0)
                {
                    ArbolGeneral <Planeta> nodoActual = q.desencolar();
                    if (nodoActual.getDatoRaiz().EsPlanetaDeLaIA())
                    {
                        nivel--;
                        string texto = nivel.ToString();
                        return("La distancia entre la raiz y el planeta del bot es de: " + texto);
                    }
                    foreach (ArbolGeneral <Planeta> hijo in nodoActual.getHijos())
                    {
                        q.encolar(hijo);
                    }
                }
            }
            return("");
        }
Example #6
0
        public Movimiento CalcularMovimiento(ArbolGeneral <Planeta> arbol)
        {
            if (!arbol.getDatoRaiz().EsPlanetaDeLaIA())
            {
                ArrayList lista = new ArrayList();
                lista = preordenCaminoIA(lista, arbol);
                Planeta origen  = (Planeta)lista[lista.Count - 1];
                Planeta destino = (Planeta)lista[lista.Count - 2];
                return(new Movimiento(origen, destino));
            }
            else
            {
                ArrayList lista = new ArrayList();
                lista = preordenCaminoJugador(lista, arbol);
                int     a = 0, b = 1;
                Planeta origen  = (Planeta)lista[a];
                Planeta destino = (Planeta)lista[b];
                for (int i = 0; i < lista.Count; i++)
                {
                    Planeta elegido       = (Planeta)lista[i];
                    Planeta elegidoMasUno = (Planeta)lista[i + 1];
                    if (elegido.EsPlanetaDeLaIA() && !elegidoMasUno.EsPlanetaDeLaIA())
                    {
                        return(new Movimiento(elegido, elegidoMasUno));
                    }
                }

                return(new Movimiento(origen, destino));
            }
        }
Example #7
0
        public String Consulta3(ArbolGeneral <Planeta> arbol)
        {
            Cola <ArbolGeneral <Planeta> > q = new Cola <ArbolGeneral <Planeta> >();

            q.encolar(arbol);
            int    nivel   = 0;
            String mensaje = "";

            while (!q.esVacia())
            {
                int elementos = q.cantElementos();
                nivel++;
                int cantidad = 0;
                int total    = 0;
                while (elementos-- > 0)
                {
                    ArbolGeneral <Planeta> nodoActual = q.desencolar();
                    total = total + nodoActual.getDatoRaiz().Poblacion();
                    cantidad++;
                    foreach (ArbolGeneral <Planeta> hijo in nodoActual.getHijos())
                    {
                        q.encolar(hijo);
                    }
                }
                double promedio = total / cantidad;
                mensaje += "\n" + "\n" + "\n" + "Nivel " + nivel + ": " + promedio + "\n";
            }
            return(mensaje);
        }
Example #8
0
        public String Consulta2(ArbolGeneral <Planeta> arbol)
        {
            Cola <ArbolGeneral <Planeta> > q = new Cola <ArbolGeneral <Planeta> >();

            q.encolar(arbol);
            int    nivel   = 0;
            String mensaje = "";

            while (!q.esVacia())
            {
                int elementos = q.cantElementos();
                nivel++;
                int cantidadPorNivel = 0;
                while (elementos-- > 0)
                {
                    ArbolGeneral <Planeta> nodoActual = q.desencolar();

                    if (nodoActual.getDatoRaiz().Poblacion() > 10)
                    {
                        cantidadPorNivel++;
                    }
                    foreach (ArbolGeneral <Planeta> hijo in nodoActual.getHijos())
                    {
                        q.encolar(hijo);
                    }
                }
                mensaje += "Nivel " + nivel + ": " + cantidadPorNivel + "\n";
            }
            return(mensaje);
        }
Example #9
0
        public Movimiento CalcularMovimiento(ArbolGeneral <Planeta> arbol)
        {
            List <Planeta> caminoHaciaRaiz   = null;
            List <Planeta> caminoHaciaHumano = null;

            caminoHaciaRaiz = CaminoIAaRaiz(arbol, new List <Planeta>());
            caminoHaciaRaiz.Reverse();

            caminoHaciaHumano = CaminoRaizAHumano(arbol, new List <Planeta>());

            if (!arbol.getDatoRaiz().EsPlanetaDeLaIA())
            {
                Movimiento movARaiz = new Movimiento(caminoHaciaRaiz[0], caminoHaciaRaiz[1]);
                return(movARaiz);
            }
            else
            {
                for (int index = 0; index < caminoHaciaHumano.Count(); index++)
                {
                    if (caminoHaciaHumano[index].EsPlanetaDeLaIA() &&
                        (caminoHaciaHumano[index + 1].EsPlanetaNeutral() ||
                         caminoHaciaHumano[index + 1].EsPlanetaDelJugador()))
                    {
                        Movimiento movAhumano = new Movimiento(caminoHaciaHumano[index], caminoHaciaHumano[index + 1]);
                        return(movAhumano);
                    }
                }
            }
            return(null);
        }
Example #10
0
 public Movimiento CalcularMovimiento(ArbolGeneral <Planeta> arbol)
 {
     if (!arbol.getDatoRaiz().EsPlanetaDeLaIA())         //Si la raiz no pertenece al bot
     {
         List <Planeta> caminoIA = new List <Planeta>(); //Creo el camino
         caminoIA = this.caminoRaizIa(arbol, caminoIA);
         int        count  = caminoIA.Count;
         Movimiento ataque = new Movimiento(caminoIA[count - 1], caminoIA[count - 2]);                //Realizo el ataque
         return(ataque);
     }
     else  //Si la raiz le pertenece al bot
     {
         List <Planeta> caminoPlayer = new List <Planeta>();              //Creo el camino
         caminoPlayer = this.caminoRaizPlayer(arbol, caminoPlayer);
         for (int count = 0; count < caminoPlayer.Count; count++)
         {
             if (!caminoPlayer[count].EsPlanetaDeLaIA())
             {
                 count--;
                 Movimiento ataque = new Movimiento(caminoPlayer[count], caminoPlayer[count + 1]);                        //Realizo el ataque
                 return(ataque);
             }
         }
         return(null);
     }
 }
Example #11
0
        public String Consulta3(ArbolGeneral <Planeta> arbol)         //Recorrido por niveles
        {
            Cola <ArbolGeneral <Planeta> > q = new Cola <ArbolGeneral <Planeta> >();

            q.encolar(arbol);
            int    nivel   = 0;
            String mensaje = "";

            while (!q.esVacia())
            {
                int elementos = q.cantElementos();
                nivel++;
                int cantidadPorNivel  = 0;
                int poblacionPorNivel = 0;
                while (elementos-- > 0)
                {
                    ArbolGeneral <Planeta> nodoActual = q.desencolar();
                    cantidadPorNivel++;
                    poblacionPorNivel += nodoActual.getDatoRaiz().Poblacion();
                    foreach (ArbolGeneral <Planeta> hijo in nodoActual.getHijos())
                    {
                        q.encolar(hijo);
                    }
                }
                mensaje += "Nivel " + nivel + ": " + poblacionPorNivel / cantidadPorNivel + "-----";
            }
            return(mensaje);
        }
Example #12
0
 //El metodo caminoRaizPlayer consigue un camino desde la raiz al primer planeta del bot
 private List <Planeta> caminoRaizPlayer(ArbolGeneral <Planeta> arbol, List <Planeta> camino)
 {
     camino.Add(arbol.getDatoRaiz()); //Agrego el planeta al camino
     if (arbol.getDatoRaiz().EsPlanetaDelJugador())
     {                                //Si encuentro el planeta del jugdor  retorno el camino
         return(camino);
     }
     else
     {
         foreach (ArbolGeneral <Planeta> hijo in arbol.getHijos())
         {
             List <Planeta> caminoAux = this.caminoRaizPlayer(hijo, camino);
             if (caminoAux != null)                     //Si esta condicion es verdadera significa que el metodo encontro el planeta del jugador
             {
                 return(caminoAux);
             }
             camino.RemoveAt(camino.Count - 1);                    //En caso de llegar a un camino equivocado elimino el ultimo elemento
         }
     }
     return(null);
 }
Example #13
0
        public List <Planeta> CaminoIAaRaiz(ArbolGeneral <Planeta> arbol, List <Planeta> caminoDeLaIA)
        {
            caminoDeLaIA.Add(arbol.getDatoRaiz());

            if (arbol.getDatoRaiz().EsPlanetaDeLaIA())
            {
                return(caminoDeLaIA);
            }
            else
            {
                foreach (var hijo in arbol.getHijos())
                {
                    List <Planeta> caminoAux = CaminoIAaRaiz(hijo, caminoDeLaIA);
                    if (caminoAux != null)
                    {
                        return(caminoAux);
                    }
                }
                caminoDeLaIA.RemoveAt(caminoDeLaIA.Count() - 1);
            }
            return(null);
        }
Example #14
0
        public Movimiento OpcionMover2ARaiz(ArbolGeneral <Planeta> arbol)
        {
            ArbolGeneral <Planeta> raiz = arbol;
            //suponemos que estan en la raiz cosa que al iniciar el do while va a cambiar
            ArbolGeneral <Planeta> nodoIA      = raiz;
            ArbolGeneral <Planeta> nodoUsuario = raiz;
            ArbolGeneral <Planeta> nodoPadreIA = raiz;

            int nivel = 1;
            List <ArbolGeneral <Planeta> > Lista_hijos = new List <ArbolGeneral <Planeta> >();

            Lista_hijos.Add(arbol);
            //arbol.getHijos();
            List <ArbolGeneral <Planeta> > Siguiente_nivel_hijos;

            do
            {
                ArbolGeneral <Planeta> nodopadre;
                //lista vacia que tendra los nodos por nivel
                Siguiente_nivel_hijos = new List <ArbolGeneral <Planeta> >();

                foreach (ArbolGeneral <Planeta> Obtener_hijo in Lista_hijos)
                {
                    nodopadre = Obtener_hijo;

                    //obtengo los hijos del nodo obtener hijos y lo agrego a la lista de nodos que tiene siguiente nivel
                    foreach (ArbolGeneral <Planeta> hijo in Obtener_hijo.getHijos())
                    {
                        if (hijo.getDatoRaiz().EsPlanetaDeLaIA())
                        {
                            nodoIA      = hijo;
                            nodoPadreIA = nodopadre;
                            break;
                        }
                        if (hijo.getDatoRaiz().EsPlanetaDelJugador())
                        {
                            nodoUsuario = hijo;
                        }
                        Siguiente_nivel_hijos.Add(hijo);
                    }
                }
                Lista_hijos = Siguiente_nivel_hijos;
                nivel++;
            } while (Siguiente_nivel_hijos.Count > 0);


            //Movimiento(Planeta origen, Planeta destino)
            Movimiento mover = new Movimiento(nodoIA.getDatoRaiz(), nodoPadreIA.getDatoRaiz());

            return(mover);
        }
Example #15
0
        public List <Planeta> CaminoRaizAHumano(ArbolGeneral <Planeta> arbol, List <Planeta> caminoDeRaizAHumano)
        {
            caminoDeRaizAHumano.Add(arbol.getDatoRaiz());

            if (arbol.getDatoRaiz().EsPlanetaDelJugador())
            {
                return(caminoDeRaizAHumano);
            }
            else
            {
                foreach (var hijo in arbol.getHijos())
                {
                    List <Planeta> caminoAux = CaminoRaizAHumano(hijo, caminoDeRaizAHumano);
                    if (caminoAux != null)
                    {
                        return(caminoAux);
                    }
                }

                caminoDeRaizAHumano.RemoveAt(caminoDeRaizAHumano.Count() - 1);
            }
            return(null);
        }
Example #16
0
 public List <Planeta> CaminoJugador(ArbolGeneral <Planeta> arbol, List <Planeta> camino)
 {
     // Primero raiz
     camino.Add(arbol.getDatoRaiz());
     // si encontramos camino
     if (arbol.getDatoRaiz().EsPlanetaDelJugador())
     {
         return(camino);
     }
     else
     {
         foreach (var hijo in arbol.getHijos())
         {
             List <Planeta> CaminoKill = CaminoJugador(hijo, camino);
             if (CaminoKill != null)
             {
                 return(CaminoKill);
             }
             camino.Remove(hijo.getDatoRaiz());
         }
     }
     return(null);
 }
Example #17
0
        public ArrayList preordenCaminoJugador(ArrayList lista, ArbolGeneral <Planeta> arbol)
        {
            Planeta planeta = arbol.getDatoRaiz();

            lista.Add(planeta);
            if (planeta.EsPlanetaDelJugador())
            {
                return(lista);
            }
            else
            {
                foreach (ArbolGeneral <Planeta> i in arbol.getHijos())
                {
                    ArrayList lista2 = preordenCaminoJugador(lista, i);
                    if (lista2 != null)
                    {
                        return(lista2);
                    }
                    lista.RemoveAt(lista.Count - 1);
                }
            }

            return(null);
        }