예제 #1
0
 public override void Comportamiento(acciones a)
 {
     foreach (var accion in a.accion)
     {
         //Console.Out.WriteLine(accion);
         if (accion.Equals("cambiar_direccion_izq"))
         {
             avanzarIzquierda();
         }
         if (accion.Equals("cambiar_direccion_der"))
         {
             avanzarDerecha();
         }
         if (accion.Equals("avanzar"))
         {
             avanzar();
         }
         if (accion.Equals("saltarIzq"))
         {
             saltar();
         }
         if (accion.Equals("saltarDer"))
         {
             saltar();
         }
     }
 }
예제 #2
0
        public acciones Regla(Bloque area, reglas r)
        {
            acciones nuevasAcciones = new acciones();

            nuevasAcciones.accion = new List <string>();
            int cond = 0, sectores = 0;

            foreach (var r_cond in r.regla)                   // lista de condiciones
            {
                foreach (var r_bloq in r_cond.bloque)         // lista de bloques regla
                {
                    foreach (var r_sector in r_bloq.sector)   // sectores de cada bloque regla
                    {
                        foreach (var e_sector in area.sector) // lista de sectores del sensor
                        {
                            //Debug.Write(e_sector.posicion + " ");
                            if ((r_sector.posicion == e_sector.posicion) && (r_sector.value == e_sector.value))
                            {
                                sectores++;
                            }
                        }
                    }
                    if (sectores == r_bloq.sector.Count)
                    {
                        cond++;
                    }
                    sectores = 0;
                }
                if (cond == r_cond.bloque.Count)
                {
                    nuevasAcciones.accion.Add(r_cond.accion); cond = 0;
                }
            }
            return(nuevasAcciones);
        }
예제 #3
0
 // --- funcion que realiza las acciones desde un conjunto de estas
 public override void Comportamiento(acciones a)
 {
     foreach (var accion in a.accion)
     {
         //Debug.WriteLine(accion);
         if (accion.Equals("avanzarIzq"))
         {
             avanzarIzquierda();
         }
         if (accion.Equals("avanzarDer"))
         {
             avanzarDerecha();
         }
         if (accion.Equals("saltarIzq"))
         {
             avanzarIzquierda(); saltar();
         }
         if (accion.Equals("saltarDer"))
         {
             avanzarDerecha(); saltar();
         }
         if (accion.Equals("saltar"))
         {
             saltar();
         }
     }
 }
예제 #4
0
 // --- Calcula el camino utilizando hilos
 private void CalcularCaminoThread()
 {
     foreach (var item in area.sector)
     {
         //Debug.Write(item.name+":"+item.value+" ");
         if (item.name.Equals("player"))
         {
             acciones action = new acciones();
             action = Camino(area);
             Comportamiento(action);
         }
     }
     //Debug.WriteLine("");
 }
예제 #5
0
        public override void Sensor(Bloque area)
        {
            //asigna los estados
            //estados e = Percepciones(sprite);
            // acciones necesitan reglas
            reglas r = new reglas();

            //// ---------------------------------------------------------------------
            //r.regla = new List<condiciones>();
            //// condiciones
            //// condicion 1
            //condiciones cond = new condiciones(); // tecnicamente esto es una regla
            //cond.bloque = new List<Bloque>();
            //Bloque bA = new Bloque();
            //bA.sector = new List<Sector>();
            //Sector sA = new Sector();
            //Sector sB = new Sector();
            //Sector sC = new Sector();
            //cond.accion = "avanzar";
            //sA.value = false;
            //sA.name = "wall";
            //sA.posicion = new Vector2(1,0);
            //sB.value = false;
            //sB.name = "wall";
            //sB.posicion = new Vector2(1,2);
            //bA.sector.Add(sA); // agrega sector 1,0
            //bA.sector.Add(sB); // agrega sector 1,2
            //cond.bloque.Add(bA); // agrega bloque a la lista de bloques.
            //r.regla.Add(cond); // agrega la condicion a la regla.
            //r.regla.Add(cond); // agrega la condicion a la regla.
            //// fin condiciones
            //  ---------------------------------------------------------------------
            //XML.Serialize(r, "reglas.dat");
            r = XML.Deserialize <reglas>("reglas.dat");
            acciones action = new acciones();

            action = Regla(area, r);
            //
            Comportamiento(action);
        }
예제 #6
0
 public abstract void Comportamiento(acciones a);
예제 #7
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);
        }