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