core.energy

energy.py

Funciones para supervisar y representar el nivel de energía del jugador durante el juego. Incluye verificación de energía y barra gráfica.

 1"""
 2energy.py
 3
 4Funciones para supervisar y representar el nivel de energía del jugador
 5durante el juego. Incluye verificación de energía y barra gráfica.
 6"""
 7
 8from colorama import Fore, init
 9import core.config as estado
10
11# Inicialización de Colorama
12init(autoreset=True)
13
14
15def verificar_energia():
16    """
17    Supervisa el nivel de energía del jugador durante el juego.
18
19    Ejecuta un bucle que verifica, cada segundo, si la energía actual
20    se ha agotado. Si llega a cero y aún no se había detectado, marca
21    la energía como agotada y detiene el juego indicando a "Freddy"
22    como responsable.
23
24    Se espera que esta función se ejecute en un hilo separado.
25
26    Notas:
27        - El bucle se detiene automáticamente cuando se activa `stop_event`.
28        - El uso de `stop_event.wait(1)` permite interrupciones inmediatas
29          del hilo, evitando esperas innecesarias.
30
31    Variables globales:
32        energia_actual (int): Nivel actual de energía del jugador.
33        energia_agotada (bool): Indica si ya se detectó energía agotada.
34        motivo_game_over (str): Motivo por el que terminó el juego.
35    """
36    while not estado.stop_event.wait(1):
37        if estado.energia_actual <= 0 and not estado.energia_agotada:
38            estado.energia_agotada = True
39            estado.motivo_game_over = "Freddy"
40            estado.stop_event.set()
41
42
43def barra_energia():
44    """
45    Genera y devuelve una representación gráfica de la barra de energía.
46
47    Returns:
48        str: Texto formateado con la barra de energía y porcentaje actual.
49    """
50    energia = estado.energia_actual
51
52    if energia >= 90:
53        bloques = 8
54    elif energia >= 75:
55        bloques = 7
56    elif energia >= 62:
57        bloques = 6
58    elif energia >= 50:
59        bloques = 5
60    elif energia >= 35:
61        bloques = 4
62    elif energia >= 20:
63        bloques = 3
64    elif energia >= 12:
65        bloques = 2
66    elif energia >= 5:
67        bloques = 1
68    else:
69        bloques = 0
70
71    barra = "█" * bloques + " " * (8 - bloques)
72
73    if energia <= 0:
74        return Fore.RED + f"[{barra}] " + Fore.RED + "SIN ENERGÍA"
75    elif energia <= 4:
76        return Fore.RED + f"[{barra}] " + Fore.RED + f"{energia}%"
77    elif energia <= 12:
78        return Fore.YELLOW + f"[{barra}] " + Fore.YELLOW + f"{energia}%"
79    elif energia <= 35:
80        return Fore.LIGHTYELLOW_EX + f"[{barra}] " + Fore.LIGHTYELLOW_EX + f"{energia}%"
81    else:
82        return Fore.GREEN + f"[{barra}] " + Fore.GREEN + f"{energia:.0f}%"
def verificar_energia():
16def verificar_energia():
17    """
18    Supervisa el nivel de energía del jugador durante el juego.
19
20    Ejecuta un bucle que verifica, cada segundo, si la energía actual
21    se ha agotado. Si llega a cero y aún no se había detectado, marca
22    la energía como agotada y detiene el juego indicando a "Freddy"
23    como responsable.
24
25    Se espera que esta función se ejecute en un hilo separado.
26
27    Notas:
28        - El bucle se detiene automáticamente cuando se activa `stop_event`.
29        - El uso de `stop_event.wait(1)` permite interrupciones inmediatas
30          del hilo, evitando esperas innecesarias.
31
32    Variables globales:
33        energia_actual (int): Nivel actual de energía del jugador.
34        energia_agotada (bool): Indica si ya se detectó energía agotada.
35        motivo_game_over (str): Motivo por el que terminó el juego.
36    """
37    while not estado.stop_event.wait(1):
38        if estado.energia_actual <= 0 and not estado.energia_agotada:
39            estado.energia_agotada = True
40            estado.motivo_game_over = "Freddy"
41            estado.stop_event.set()

Supervisa el nivel de energía del jugador durante el juego.

Ejecuta un bucle que verifica, cada segundo, si la energía actual se ha agotado. Si llega a cero y aún no se había detectado, marca la energía como agotada y detiene el juego indicando a "Freddy" como responsable.

Se espera que esta función se ejecute en un hilo separado.

Notas: - El bucle se detiene automáticamente cuando se activa stop_event. - El uso de stop_event.wait(1) permite interrupciones inmediatas del hilo, evitando esperas innecesarias.

Variables globales: energia_actual (int): Nivel actual de energía del jugador. energia_agotada (bool): Indica si ya se detectó energía agotada. motivo_game_over (str): Motivo por el que terminó el juego.

def barra_energia():
44def barra_energia():
45    """
46    Genera y devuelve una representación gráfica de la barra de energía.
47
48    Returns:
49        str: Texto formateado con la barra de energía y porcentaje actual.
50    """
51    energia = estado.energia_actual
52
53    if energia >= 90:
54        bloques = 8
55    elif energia >= 75:
56        bloques = 7
57    elif energia >= 62:
58        bloques = 6
59    elif energia >= 50:
60        bloques = 5
61    elif energia >= 35:
62        bloques = 4
63    elif energia >= 20:
64        bloques = 3
65    elif energia >= 12:
66        bloques = 2
67    elif energia >= 5:
68        bloques = 1
69    else:
70        bloques = 0
71
72    barra = "█" * bloques + " " * (8 - bloques)
73
74    if energia <= 0:
75        return Fore.RED + f"[{barra}] " + Fore.RED + "SIN ENERGÍA"
76    elif energia <= 4:
77        return Fore.RED + f"[{barra}] " + Fore.RED + f"{energia}%"
78    elif energia <= 12:
79        return Fore.YELLOW + f"[{barra}] " + Fore.YELLOW + f"{energia}%"
80    elif energia <= 35:
81        return Fore.LIGHTYELLOW_EX + f"[{barra}] " + Fore.LIGHTYELLOW_EX + f"{energia}%"
82    else:
83        return Fore.GREEN + f"[{barra}] " + Fore.GREEN + f"{energia:.0f}%"

Genera y devuelve una representación gráfica de la barra de energía.

Returns: str: Texto formateado con la barra de energía y porcentaje actual.