예제 #1
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);
        }
예제 #2
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);
        }