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(); } } }
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); }
// --- 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(); } } }
// --- 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(""); }
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); }
public abstract void Comportamiento(acciones a);
// --- 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); }