def obtener_informacion_1(): """ Obtenemos la informacion necesaria de los chivatos, los cuales nos daran los datos de los maleantes que ellos conozcan.""" if (ClassUtils.isEmpty(info)): return False else: # Obtenemos el Chivato mas cercano chivato_cercano = ClassUtils.getCercano(info) if (chivato_cercano == None): return False Logger.log("El chivato mas cercano es: " + str(chivato_cercano)) # Eliminamos el chivato de la lista total de Chivatos. del info[chivato_cercano] boolean_info = obtener_informacion_2(chivato_cercano) if (boolean_info == False): obtener_informacion_1() else: return True
def localizar_chivatos(chivatos, cazarecompensas): """Devuelve un mapa de la localizacion de los chivatos como key -> el nombre del chivato como valor -> la distancia""" info_chivato = {} for c in chivatos: chivato = c distancia = ClassUtils.getDistancia(chivato, cazarecompensas.localizacion) info_chivato.update({chivato : distancia}) #print(info_chivato) return info_chivato
def get_horario(): """Metodo principal para obtener el resultado del ejercicio, el horario""" # Para obtener informacion de los maleantes, lo primero es atrapar un chivato y obtener su informacion. global info info = Chivato.localizar_chivatos(lista_total_chivatos, cazarecompensas) obtener_informacion_1() Logger.log('Informacion obtenida: ' + str(info)) # Mientras no tengamos informacion, consultamos al siguiente chivato while ((ClassUtils.isEmpty(cazarecompensas.list_info) == True) and (ClassUtils.isEmpty(info) == False)): obtener_informacion_1() Logger.log('Informacion obtenida: ' + str(info)) # Recorrer los maleantes con la informacion obtenida, mientras exista informacion y haya tiempo while (ClassUtils.isEmpty(cazarecompensas.list_info) == False and (getTime() > 0)): # Buscamos al Maleante mas cercano, de la lista de informacion villano = ClassUtils.getCercanoMaleante(cazarecompensas.list_info, cazarecompensas) Logger.log("Villano mas cercano: " + str(villano.nombre)) # Si no se puede atrapar, salimos de la iteracion y obtenemos el informe final seguir = atrapar_maleante(villano) if (seguir == False): return # Si la lista con informacion del Cazarecompensas esta vacia, buscamos a otro chivato. if (ClassUtils.isEmpty(cazarecompensas.list_info) and (not ClassUtils.isEmpty(lista_total_maleantes))): obtener_informacion_1() Logger.log("Generar informe final") generarInforme()
def atrapar_maleante(maleante): """Metodo que situa al Cazarecompensas en la localizacion del chivato""" # Obtenemos la distancia al maleante pasado como parametro distancia = ClassUtils.getDistancia(maleante, cazarecompensas.localizacion) # Si hay, tiempo se le da caza, si no se finaliza la caza y se genera el informe. if ((getTime() - distancia) < 0): return False else: setTime(distancia) cazarecompensas.localizacion = maleante.localizacion # Se captura al maleante, se le quita la vida. captura = capturarMaleante(maleante) if (captura == False): return False # Finalmente se genera un nuevo informe con los datos de la caza nuevo_informe(getTime(), maleante.nombre, maleante.localizacion, maleante.recompensa) cazarecompensas.list_info.remove(maleante) lista_total_maleantes.remove(maleante) return True
def atrapar_chivato(chivato): """Metodo que situa al Cazarecompensas en la localizacion del chivato y obtiene su informacion.""" # Calcula la distancia entre el Cararecompensas y el chivato distancia = ClassUtils.getDistancia(chivato, cazarecompensas.localizacion) Logger.log("Distancia al chivato mas cercano es: " + str(distancia)) # Si aun hay tiempo, le da caza para obtener su informacion(solo en caso de que no sea a su vez Maleante) if ((getTime() - distancia) < 0): info = {} return False else: setTime(distancia) lista_total_chivatos.remove(chivato) cazarecompensas.localizacion = chivato.localizacion Logger.log("La nueva localizacion del Cazarecompensas es: " + str(cazarecompensas.localizacion)) # Se genera un nuevo informe registrando la informacion de la caza nuevo_informe(getTime(), chivato.nombre, chivato.localizacion, 0) if (chivato.isMaleante == False): setList(chivato.list_maleantes, cazarecompensas.list_info) return True return False