def leave_nebiland(self, agregar_evento, borrar_evento, retirarse, tiempo): """agregar_evento: fucntion, borrar_evento: function, tiempo: (int, int), elimina los eventos de un grupo que se quiere retirar del parque y lo elimina de este, retorna None""" borrar_evento(self) self.baja_energia = True agregar_evento(sumar_tiempo(tiempo, (0, 1)), retirarse(self), "retirarse del parque", ["Nebiland"], self)
def _limpiar(): """limpiador: Limpiador, tiempo_iniciao: (int, int), atraccion: Atraccion, limpia una atracción, retorna True""" tiempo = sumar_tiempo(tiempo_inical, (0, atraccion.tiempo_limpieza)) if atraccion.tiempo_limpieza < 0: return False self.borrar_evento(atraccion) self.agregar_evento( tiempo, self.dejar_de_limpiar(limpiador, tiempo, atraccion), "dejar de limpiar", ["Atraccion", "Limpiador"], limpiador) return True
def llamar_limpieza(self, id_atraccion, tiempo_inicial, limpiador=None): """id_atraccion: str, tiempo_inicial: (int, int), limpiador: Limpiador, llama a un limpiador, para que limpie una determinada atracción, retorna None""" if limpiador is None: limpiador = self.limpiadores[0] limpiando = limpiador.agregar_llamado(id_atraccion) atraccion = self.atracciones[id_atraccion] tiempo = sumar_tiempo(tiempo_inicial, (0, limpiador.tiempo_traslado)) if not limpiando: self.estadisticas.llamados_limpieza += 1 limpiador.limpiando = True self.agregar_evento( tiempo, self.comenzar_limpiar(limpiador, tiempo, atraccion), "trasladarse", ["Atraccion", "Limpiador"], limpiador)
def _reparar(): """tecnico: Tecnico, tiempo_inicial: (int, int), atraccion: Atraccion, repara una atracción, retorna True""" atraccion.fallas_totales += 1 if self.restriccion_ruziland: atraccion.fallas_ruziland += 1 if self.atraccion_falladora is None: self.atraccion_falladora = atraccion if self.atraccion_falladora.fallas_totales \ < atraccion.fallas_totales: self.atraccion_falladora = atraccion tiempo = sumar_tiempo(tiempo_inicial, (0, tecnico.tiempo_reparacion)) self.agregar_evento( tiempo, self.dejar_de_reparar(tecnico, tiempo, atraccion), "dejar de reparar", ["Atraccion", "Tecnico"], tecnico) return True
def llamar_tecnico(self, id_atraccion, tiempo_inicial, tecnico=None): """id__atraccion: str, tiempo_inicial: (int, int), tecnico: Tecnico, llama al técnico para que limpie una determinada atracción, retorna None""" if tecnico is None: tecnico = self.tecnicos[0] reparando = tecnico.agregar_llamado(id_atraccion) atraccion = self.atracciones[id_atraccion] atraccion.fuera_de_servicio = True atraccion.inicio_reparacion = tiempo_inicial self.borrar_evento(atraccion) tiempo = sumar_tiempo(tiempo_inicial, (0, tecnico.tiempo_traslado)) if not reparando: self.estadisticas.llamados_tecnicos += 1 tecnico.reparando = True self.agregar_evento(tiempo, self.reparar(tecnico, tiempo, atraccion), "reparar atracción", ["Atraccion", "Tecnico"], tecnico)
def _tomar_decision(): """grupo: Grupo, tiempo_inicial: (int, int), le entrega al grupo, las posibilidades de realizar ciertas acciones y éste escoge una según una probabilidad, luego crea el evento de su próxima decisión, retorna False""" self.borrar_evento(grupo) probabilidad = uniform(0, 1) tiempo = sumar_tiempo(tiempo_inicial, par.TIEMPO_DECIDIR) if probabilidad < par.PROBABILIDAD_HACER_FILA: atraccion = self.escoger_atraccion(grupo) if atraccion: self.agregar_evento( tiempo, self.hacer_fila(grupo, atraccion, tiempo), "hacer fila en atracción", ["Atraccion", "Grupo"], grupo) else: self.borrar_evento(grupo) self.agregar_evento(tiempo, self.retirarse_del_parque(grupo), "retirarse de nebiland", ["Nebiland", "Grupo"], grupo) elif probabilidad < par.PROBABILIDAD_HACER_FILA \ + (grupo.hambre_promedio * par.MULTIPLICANDO_HAMBRE): restaurant = self.escoger_restaurant(grupo) if restaurant: self.agregar_evento(tiempo, self.comer(grupo, restaurant, tiempo), "comer en restaurante", ["Restaurant", "Grupo"], grupo) else: self.estadisticas.personas_sin_comer \ += grupo.cantidad_personas self.agregar_evento(tiempo, self.descansar(grupo, tiempo), "descansar", ["Grupo"], grupo) else: self.agregar_evento(tiempo, self.descansar(grupo, tiempo), "descansar", ["Grupo"], grupo) grupo.siguiente_accion = None return False
def _realizar_decision(): """grupo: Grupo, tiempo_inicial: (int, int), decision: str, realiza una acción específica, según lo que el grupo decidió anteriormente, retorna None.""" self.borrar_evento(grupo) tiempo = sumar_tiempo(tiempo_inicial, par.TIEMPO_DECIDIR) if decision == "divertirse": atraccion = self.escoger_atraccion(grupo) if atraccion: self.agregar_evento( tiempo, self.hacer_fila(grupo, atraccion, tiempo), "hacer fila en atracción", ["Atraccion", "Grupo"], grupo) else: self.borrar_evento(grupo) self.agregar_evento(tiempo, self.retirarse_del_parque(grupo), "retirarse de nebiland", ["Nebiland", "Grupo"], grupo) elif decision == "comer": restaurant = self.escoger_restaurant(grupo) if restaurant: self.agregar_evento(tiempo, self.comer(grupo, restaurant, tiempo), "comer en restaurante", ["Restaurant", "Grupo"], grupo) else: self.estadisticas.personas_sin_comer \ += grupo.cantidad_personas self.agregar_evento(tiempo, self.descansar(grupo, tiempo), "descansar", ["Grupo"], grupo) else: self.agregar_evento(tiempo, self.descansar(grupo, tiempo), "descansar", ["Grupo"], grupo) grupo.siguiente_accion = None return False