core.timers

timers.py

Controla la progresión de la hora en el juego y ajusta la velocidad de los animatrónicos según la hora.

 1"""
 2timers.py
 3
 4Controla la progresión de la hora en el juego y ajusta la velocidad
 5de los animatrónicos según la hora.
 6"""
 7
 8import time
 9import random
10
11from colorama import Fore, init, Style
12init(autoreset=True)
13
14import core.config as estado
15from utils.utils import limpiar_pantalla, reproducir_sonido
16from core.animatronics import animatronics
17
18
19def avanzar_hora():
20    """
21    Avanza la hora del juego en intervalos definidos hasta la hora límite.
22
23    Ejecuta un bucle que incrementa la variable global `hora_actual` 
24    cada cierto tiempo definido en la configuración (`config["tiempo_avanzar_hora"]`). 
25    Cada vez que la hora avanza, se ajustan las velocidades de los animatrónicos 
26    según corresponda.
27
28    Al llegar a la hora 8:
29        - Se limpia la pantalla.
30        - Se reproduce el sonido de victoria.
31        - Se muestra un mensaje de triunfo.
32        - Se activa `stop_event` para detener todos los hilos activos.
33
34    Variables globales:
35        hora_actual (int): Representa la hora actual del juego.
36
37    Notas:
38        - Debe ejecutarse en un hilo separado para no bloquear la ejecución principal.
39        - El bucle se interrumpe cuando se activa `stop_event`.
40        - `stop_event.wait(tiempo)` permite interrupciones inmediatas de la espera.
41    """
42    while not estado.stop_event.wait(estado.config["tiempo_avanzar_hora"]):
43        if estado.hora_actual < 8:
44            estado.hora_actual += 1
45            ajustar_tiempos_por_hora(estado.hora_actual)
46        if estado.hora_actual == 8:
47            limpiar_pantalla()
48            reproducir_sonido(estado.config["sonido_victoria"])
49            print(Fore.GREEN + Style.BRIGHT + "\n¡6 AM!\n")
50            estado.stop_event.set()
51            time.sleep(1)
52            break
53
54
55def ajustar_tiempos_por_hora(hora_actual):
56    """
57    Ajusta la velocidad de movimiento de los animatrónicos según la hora.
58
59    A partir de la hora 6 (6 AM):
60        - Reduce el tiempo de desplazamiento de los animatrónicos en un 60 %
61          sin permitir que sea menor a 5 segundos.
62        - Marca a cada animatrónico como acelerado para evitar aplicar
63          la reducción varias veces.
64
65    Args:
66        hora_actual (int): Hora actual del juego.
67    """
68    if hora_actual >= 6:
69        for nombre, anim in animatronics.items():
70            if not anim.acelerado:
71                # Ajusta IA para simular aceleración
72                anim.ia_level = max(5, anim.ia_level - random.randint(1, 5))
73                anim.acelerado = True
def avanzar_hora():
20def avanzar_hora():
21    """
22    Avanza la hora del juego en intervalos definidos hasta la hora límite.
23
24    Ejecuta un bucle que incrementa la variable global `hora_actual` 
25    cada cierto tiempo definido en la configuración (`config["tiempo_avanzar_hora"]`). 
26    Cada vez que la hora avanza, se ajustan las velocidades de los animatrónicos 
27    según corresponda.
28
29    Al llegar a la hora 8:
30        - Se limpia la pantalla.
31        - Se reproduce el sonido de victoria.
32        - Se muestra un mensaje de triunfo.
33        - Se activa `stop_event` para detener todos los hilos activos.
34
35    Variables globales:
36        hora_actual (int): Representa la hora actual del juego.
37
38    Notas:
39        - Debe ejecutarse en un hilo separado para no bloquear la ejecución principal.
40        - El bucle se interrumpe cuando se activa `stop_event`.
41        - `stop_event.wait(tiempo)` permite interrupciones inmediatas de la espera.
42    """
43    while not estado.stop_event.wait(estado.config["tiempo_avanzar_hora"]):
44        if estado.hora_actual < 8:
45            estado.hora_actual += 1
46            ajustar_tiempos_por_hora(estado.hora_actual)
47        if estado.hora_actual == 8:
48            limpiar_pantalla()
49            reproducir_sonido(estado.config["sonido_victoria"])
50            print(Fore.GREEN + Style.BRIGHT + "\n¡6 AM!\n")
51            estado.stop_event.set()
52            time.sleep(1)
53            break

Avanza la hora del juego en intervalos definidos hasta la hora límite.

Ejecuta un bucle que incrementa la variable global hora_actual cada cierto tiempo definido en la configuración (config["tiempo_avanzar_hora"]). Cada vez que la hora avanza, se ajustan las velocidades de los animatrónicos según corresponda.

Al llegar a la hora 8: - Se limpia la pantalla. - Se reproduce el sonido de victoria. - Se muestra un mensaje de triunfo. - Se activa stop_event para detener todos los hilos activos.

Variables globales: hora_actual (int): Representa la hora actual del juego.

Notas: - Debe ejecutarse en un hilo separado para no bloquear la ejecución principal. - El bucle se interrumpe cuando se activa stop_event. - stop_event.wait(tiempo) permite interrupciones inmediatas de la espera.

def ajustar_tiempos_por_hora(hora_actual):
56def ajustar_tiempos_por_hora(hora_actual):
57    """
58    Ajusta la velocidad de movimiento de los animatrónicos según la hora.
59
60    A partir de la hora 6 (6 AM):
61        - Reduce el tiempo de desplazamiento de los animatrónicos en un 60 %
62          sin permitir que sea menor a 5 segundos.
63        - Marca a cada animatrónico como acelerado para evitar aplicar
64          la reducción varias veces.
65
66    Args:
67        hora_actual (int): Hora actual del juego.
68    """
69    if hora_actual >= 6:
70        for nombre, anim in animatronics.items():
71            if not anim.acelerado:
72                # Ajusta IA para simular aceleración
73                anim.ia_level = max(5, anim.ia_level - random.randint(1, 5))
74                anim.acelerado = True

Ajusta la velocidad de movimiento de los animatrónicos según la hora.

A partir de la hora 6 (6 AM): - Reduce el tiempo de desplazamiento de los animatrónicos en un 60 % sin permitir que sea menor a 5 segundos. - Marca a cada animatrónico como acelerado para evitar aplicar la reducción varias veces.

Args: hora_actual (int): Hora actual del juego.