コード例 #1
0
        // --- funcion que calcula el camino que debe seguir el agente, retorna solo el siguiente movimiento.
        public String CaminoActualizado(Bloque area)
        {
            BusquedaAestrella cOp    = new BusquedaAestrella(area, profundidad); // instancia el algoritmo A*
            Vector2           final  = cOp.getPosicionPlayer;                    // obtiene la posicion del player
            Vector2           inicio = cOp.getPosicionAgent;                     // obtiene la posicion del agente (posicion inicial)
            String            Accion = "nada";
            Vector2           sucesion;                                          // item: posicion a alcansar

            if ((final != posPlayer) || (inicio != posAgent))                    // si la posicion del jugador cambia
            {
                camino   = cOp.encontrarCamino();
                sucesion = camino[1];
            }
            else
            {
                sucesion = camino[1];
            }

            //Debug.WriteLine(item + " - " + reff);
            //derecha
            if ((sucesion.X == inicio.X + 1) && (sucesion.Y == inicio.Y))
            {
                Accion = "avanzarDer";
            }
            //izquierda
            if ((sucesion.X == inicio.X - 1) && (sucesion.Y == inicio.Y))
            {
                Accion = "avanzarIzq";
            }
            //arriba
            if ((sucesion.X == inicio.X) && (sucesion.Y == inicio.Y - 1))
            {
                Accion = "saltar";
            }
            //abajo
            if ((sucesion.X == inicio.X) && (sucesion.Y == inicio.Y + 1))
            {
                // por definir
            }
            //derecha-arriba
            if ((sucesion.X == inicio.X + 1) && (sucesion.Y == inicio.Y - 1))
            {
                if ((area.obtenerSector(new Vector2(inicio.X + 1, inicio.Y)).value == true))
                {
                    Accion = "saltarDer";
                }
                else
                {
                    Accion = "avanzarDer";
                }
            }
            //derecha-abajo
            if ((sucesion.X == inicio.X + 1) && (sucesion.Y == inicio.Y + 1))
            {
                Accion = "avanzarDer";
            }
            //izquierda-arriba
            if ((sucesion.X == inicio.X - 1) && (sucesion.Y == inicio.Y - 1))
            {
                if ((area.obtenerSector(new Vector2(inicio.X - 1, inicio.Y)).value == true))
                {
                    Accion = "saltarIzq";
                }
                else
                {
                    Accion = "avanzarIzq";
                }
            }
            //izquierda abajo
            if ((sucesion.X == inicio.X - 1) && (sucesion.Y == inicio.Y + 1))
            {
                Accion = "avanzarIzq";
            }
            //reff = item;
            // asigna los valores de las posiciones al agente y al player
            posPlayer = final;
            posAgent  = inicio;

            return(Accion);
        }
コード例 #2
0
        // --- funcion que calcula el camino que debe seguir el agente, retorna el camino completo
        public acciones Camino(Bloque area)
        {
            BusquedaAestrella cOp    = new BusquedaAestrella(area, profundidad); // instancia el algoritmo A*
            Vector2           final  = cOp.getPosicionPlayer;                    // obtiene la posicion del player
            acciones          camino = new acciones();

            camino.accion = new List <string>();

            /*
             *  verifica que el jugador haya cambiado de posicion.
             */
            if (final != posPlayer)
            {
                Vector2        reff       = cOp.getPosicionAgent; // obtiene la posicion del agente (posicion inicial)
                List <Vector2> posiciones = cOp.encontrarCamino();
                foreach (var item in posiciones)
                {
                    //Debug.WriteLine(item + " - " + reff);
                    //derecha
                    if ((item.X == reff.X + 1) && (item.Y == reff.Y))
                    {
                        camino.accion.Add("avanzarDer");
                    }
                    //izquierda
                    if ((item.X == reff.X - 1) && (item.Y == reff.Y))
                    {
                        camino.accion.Add("avanzarIzq");
                    }
                    //arriba
                    if ((item.X == reff.X) && (item.Y == reff.Y - 1))
                    {
                        camino.accion.Add("saltar");
                    }
                    //abajo
                    if ((item.X == reff.X) && (item.Y == reff.Y + 1))
                    {
                        // nose
                    }
                    //derecha-arriba
                    if ((item.X == reff.X + 1) && (item.Y == reff.Y - 1))
                    {
                        camino.accion.Add("saltarDer");
                    }
                    //derecha-abajo
                    if ((item.X == reff.X + 1) && (item.Y == reff.Y + 1))
                    {
                        camino.accion.Add("avanzarDer");
                    }
                    //izquierda-arriba
                    if ((item.X == reff.X - 1) && (item.Y == reff.Y - 1))
                    {
                        camino.accion.Add("saltarIzq");
                    }
                    //izquierda abajo
                    if ((item.X == reff.X - 1) && (item.Y == reff.Y + 1))
                    {
                        camino.accion.Add("avanzarIzq");
                    }
                    reff = item;
                }
                posPlayer = final;
                return(camino);
            }

            return(camino);
        }