ui.menu
menu_principal.py
Muestra el menú principal interactivo del juego y gestiona la navegación del usuario.
1""" 2menu_principal.py 3 4Muestra el menú principal interactivo del juego y gestiona la navegación del usuario. 5""" 6 7import sys 8import time 9import msvcrt 10 11from colorama import init, Fore, Style 12init(autoreset=True) 13 14import core.config as estado 15from core.game_engine import iniciar_juego 16from ui.screens import mostrar_instrucciones 17from utils.utils import limpiar_pantalla 18 19 20def menu_principal(): 21 """ 22 Muestra el menú principal interactivo y gestiona la navegación del usuario. 23 24 Despliega un menú con tres opciones: "INICIAR NOCHE", "INSTRUCCIONES" y "SALIR". 25 Permite navegar entre ellas con las flechas arriba/abajo y seleccionar con Enter. 26 27 Comportamiento al seleccionar una opción: 28 - "INICIAR NOCHE": Llama a `iniciar_juego()` y sale del menú. 29 - "INSTRUCCIONES": Llama a `mostrar_instrucciones()`. 30 - "SALIR": Muestra mensaje de despedida, limpia la pantalla y termina la ejecución. 31 32 Notas: 33 - Usa `msvcrt.getch()` para capturar la entrada del teclado en Windows. 34 - Limpia la pantalla antes de mostrar el menú cada vez. 35 - Resalta la opción seleccionada con colores y estilos. 36 - Se ejecuta en un bucle hasta que el usuario inicia el juego o sale. 37 38 Variables locales: 39 ancho_pantalla (int): Ancho para centrar el texto del menú. 40 opciones (list): Lista de opciones del menú. 41 seleccion (int): Índice de la opción actualmente seleccionada. 42 """ 43 estado.motivo_game_over = None 44 45 ancho_pantalla = 60 46 opciones = ["INICIAR NOCHE", "INSTRUCCIONES", "SALIR"] 47 seleccion = 0 48 49 while True: 50 limpiar_pantalla() 51 52 # Título 53 print(Style.BRIGHT + Fore.WHITE + """ 54 55 ███████╗ ███╗ ██╗ █████╗ ███████╗ 56 ██╔════╝ ████╗ ██║ ██╔══██╗ ██╔════╝ 57 █████╗ ██╔██╗ ██║ ███████║ █████╗ 58 ██╔══╝ ██║╚██╗██║ ██╔══██║ ██╔══╝ 59 ██║ ██║ ╚████║ ██║ ██║ ██║ 60 ╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ 61 SIGNAL LOST 62 """) 63 64 # Opciones 65 for i, opcion in enumerate(opciones): 66 flecha = ">> " if i == seleccion else " " 67 color = Fore.GREEN if i == 0 else Fore.YELLOW if i == 1 else Fore.RED 68 linea = flecha + opcion 69 print("\n" + color + Style.BRIGHT + linea.center(ancho_pantalla)) 70 71 # Leer tecla 72 tecla = msvcrt.getch() 73 74 if tecla == b'\xe0': # Tecla especial (flechas) 75 flecha = msvcrt.getch() 76 if flecha == b'H': # Flecha arriba 77 seleccion = (seleccion - 1) % len(opciones) 78 elif flecha == b'P': # Flecha abajo 79 seleccion = (seleccion + 1) % len(opciones) 80 81 elif tecla == b'\r': # Enter 82 if seleccion == 0: 83 iniciar_juego() 84 break 85 elif seleccion == 1: 86 mostrar_instrucciones() 87 elif seleccion == 2: 88 print(Fore.GREEN + Style.BRIGHT + 89 "\n¡Hasta la próxima, vigilante nocturno!") 90 time.sleep(1.5) 91 limpiar_pantalla() 92 sys.exit()