// --- 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); }
// --- 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); }