Esempio n. 1
0
        public Movimiento CalcularMovimiento(ArbolGeneral <Planeta> arbol)
        {
            List <Planeta> cami = new List <Planeta>();

            CaminoPreOrden(arbol, cami);
            int Cant = cami.Count;

            if (Cant > 1)
            {
                Movimiento T = new Movimiento(cami[Cant - 1], cami[Cant - 2]);
                return(T);
            }


            CaminoJugador(arbol, cami);
            List <Planeta> jugador = CaminoJugador(arbol, cami);
            Movimiento     kill    = new Movimiento(cami[x], jugador[y]);

            if (x < 3 && cami[x].Poblacion() / 2 > jugador[y].Poblacion() || jugador[y].EsPlanetaDeLaIA())
            // si origen es menor a tres y la mitad de la poblacion de origen es menor que la poblacion del destino (osea no lo va vencer) o que el destino sea planeta de la ia

            {
                // sube uno de origen y uno de destino, y se resetea el contador mov
                x++;
                y++;
                mov = 0;
            }
            //se incrementa mov en 1 si lo de arriba  si no se cumple
            else
            {
                mov++;
            }
            // si el contador mov llega a 2 (Se hicieron 2 movimientos sin poder capturar el planeta) se resetea el origen y el destino para llamar más naves desde root para capturar
            if (mov == 2)
            {
                x = 0;
                y = 1;
            }

            return(kill);
        }
Esempio n. 2
0
        public Movimiento enviarMovimiento(ArbolGeneral <Planeta> arbol)
        {
            List <ArbolGeneral <Planeta> > ListaPreorden       = arbol.ListaPreOrden();
            List <ArbolGeneral <Planeta> > ListaDeNodosIA      = new List <ArbolGeneral <Planeta> >();
            List <ArbolGeneral <Planeta> > ListaDeNodosUsuario = new List <ArbolGeneral <Planeta> >();

            foreach (ArbolGeneral <Planeta> nodo in ListaPreorden)
            {
                if (nodo.getDatoRaiz().EsPlanetaDeLaIA())
                {
                    ListaDeNodosIA.Add(nodo);
                }
                if (nodo.getDatoRaiz().EsPlanetaDelJugador())
                {
                    ListaDeNodosUsuario.Add(nodo);
                }
            }

            int menordistancia = -20;
            ArbolGeneral <Planeta> nodoIAaMover = arbol;

            foreach (ArbolGeneral <Planeta> nodoU in ListaDeNodosUsuario)
            {
                foreach (ArbolGeneral <Planeta> nodoIA in ListaDeNodosUsuario)
                {
                    int distancia = Distancia_Nodo(arbol, nodoIA, nodoU);
                    if (Math.Abs(distancia) < menordistancia)
                    {
                        nodoIAaMover = nodoIA;
                    }
                }
            }

            Movimiento mover = obtengoCamino(arbol, nodoIAaMover, menordistancia);

            return(mover);
        }
Esempio n. 3
0
        public Movimiento obtengoCamino(ArbolGeneral <Planeta> arbol, ArbolGeneral <Planeta> ia, int sentido)
        {
            List <ArbolGeneral <Planeta> > ListaPreorden = arbol.ListaPreOrden();
            Movimiento mover = null;
            Planeta    origen;
            Planeta    destino;
            int        posicioIA = -1;

            for (int y = 0; y < ListaPreorden.Count; y++)
            {
                if (ListaPreorden[y].Equals(ia))
                {
                    posicioIA = y;
                }
            }
            if (sentido == -20)
            {//ir a raiz
                //Es hijo de la raiz
                if (posicioIA - 1 % 3 == 0 || posicioIA == 1)
                {
                    //si posicion-1 es divisible por 3 se que es uno de los nodos hijos de la raiz
                    origen  = ListaPreorden[posicioIA].getDatoRaiz();
                    destino = ListaPreorden[0].getDatoRaiz();
                    mover   = new Movimiento(origen, destino);
                }
                else
                {
                    //no es hijo de la raiz
                    origen  = ListaPreorden[posicioIA].getDatoRaiz();
                    destino = ListaPreorden[posicioIA - 1].getDatoRaiz();

                    mover = new Movimiento(origen, destino);
                    mover = OpcionMover2ARaiz(arbol);
                }
            }
            else if (sentido > 0)
            {
                //me muevo para arriba
                if (posicioIA - 1 % 3 == 0 || posicioIA == 1)
                {
                    //si posicion-1 es divisible por 3 se que es uno de los nodos hijos de la raiz
                    origen  = ListaPreorden[posicioIA].getDatoRaiz();
                    destino = ListaPreorden[0].getDatoRaiz();
                    mover   = new Movimiento(origen, destino);
                }
                else
                {
                    //no es hijo de la raiz
                    origen  = ListaPreorden[posicioIA].getDatoRaiz();
                    destino = ListaPreorden[posicioIA - 1].getDatoRaiz();
                    mover   = new Movimiento(origen, destino);
                }
            }
            else
            {
                //me muevo para abajo
                if (posicioIA - 1 % 3 == 0 || posicioIA == 1)
                {
                    //si posicion-1 es divisible por 3 se que es uno de los nodos hijos de la raiz
                    origen  = ListaPreorden[posicioIA].getDatoRaiz();
                    destino = ListaPreorden[posicioIA + 3].getDatoRaiz();
                    mover   = new Movimiento(origen, destino);
                }
                else
                {
                    //no es hijo de la raiz
                    origen  = ListaPreorden[posicioIA].getDatoRaiz();
                    destino = ListaPreorden[posicioIA + 1].getDatoRaiz();
                    mover   = new Movimiento(origen, destino);
                }
            }



            return(mover);
        }