core.animatronics
animatronics.py
Define la clase Animatronico y las instancias de animatrónicos del juego. Cada animatrónico tiene posición, rutas de movimiento, sonidos y lógica propia.
1""" 2animatronics.py 3 4Define la clase Animatronico y las instancias de animatrónicos del juego. 5Cada animatrónico tiene posición, rutas de movimiento, sonidos y lógica propia. 6""" 7 8import random 9 10import core.config as estado 11from utils.utils import reproducir_sonido 12 13 14class Animatronico: 15 """ 16 Representa un animatrónico dentro del juego. 17 18 Atributos: 19 nombre (str): Nombre del animatrónico. 20 spawn (int): Posición inicial. 21 posicion (int): Posición actual. 22 ia_level (int): Nivel de IA (1-20). 23 intervalo_min (int): Intervalo mínimo de movimiento. 24 intervalo_max (int): Intervalo máximo de movimiento. 25 rutas (dict): Diccionario de rutas posibles para cada posición. 26 pasos_sonido (str): Archivo de sonido de pasos. 27 cancion_muerte (str): Archivo de sonido de muerte. 28 cara (str): Icono o símbolo que representa al animatrónico. 29 canal_pasos (int): Canal de reproducción de pasos. 30 acelerado (bool): Indica si el animatrónico está acelerado. 31 """ 32 33 def __init__( 34 self, nombre, spawn, ia_level, intervalo_min, intervalo_max, rutas, 35 pasos_sonido, cancion_muerte, cara, canal_pasos 36 ): 37 """ 38 Inicializa un animatrónico con sus atributos y configuración. 39 40 Args: 41 nombre (str): Nombre del animatrónico. 42 spawn (int): Posición inicial. 43 ia_level (int): Nivel de IA. 44 intervalo_min (int): Intervalo mínimo de movimiento. 45 intervalo_max (int): Intervalo máximo de movimiento. 46 rutas (dict): Diccionario de rutas de movimiento. 47 pasos_sonido (str): Sonido de pasos. 48 cancion_muerte (str): Sonido de muerte. 49 cara (str): Representación visual del animatrónico. 50 canal_pasos (int): Canal de audio para los pasos. 51 """ 52 self.nombre = nombre 53 self.spawn = spawn 54 self.posicion = spawn 55 self.ia_level = ia_level 56 self.intervalo_min = intervalo_min 57 self.intervalo_max = intervalo_max 58 self.rutas = rutas 59 self.pasos_sonido = pasos_sonido 60 self.cancion_muerte = cancion_muerte 61 self.cara = cara 62 self.canal_pasos = canal_pasos 63 self.acelerado = False 64 65 def mover(self): 66 """ 67 Mueve al animatrónico a una nueva posición posible según su ruta. 68 69 Freddy solo se mueve a partir de las 3 AM. Para otros animatrónicos, 70 se puede mantener en la misma posición o moverse a otra de sus rutas. 71 72 Reproduce sonido de pasos si se mueve. 73 """ 74 posibles = self.rutas.get(self.posicion, []) 75 if not posibles: 76 return 77 78 # Freddy no se mueve antes de las 3AM 79 if self.nombre == "Freddy" and estado.hora_actual < 5: 80 return 81 82 if self.nombre == "Freddy": 83 nueva_posicion = random.choice(posibles) 84 reproducir_sonido(self.pasos_sonido, canal=self.canal_pasos) 85 else: 86 opciones_movimiento = posibles + [self.posicion] 87 nueva_posicion = random.choice(opciones_movimiento) 88 if nueva_posicion != self.posicion: 89 reproducir_sonido(self.pasos_sonido, canal=self.canal_pasos) 90 91 self.posicion = nueva_posicion 92 93 def regresar_spawn(self): 94 """ 95 Devuelve al animatrónico a su posición inicial (spawn). 96 """ 97 self.posicion = self.spawn 98 99 100# Instancias de animatrónicos del juego 101animatronics = { 102 "Freddy": Animatronico( 103 "Freddy", 2, 8, 4, 7, { 104 2: [1], 105 1: [3], 106 3: [4], 107 4: [8] 108 }, 109 "freddy_pasos.mp3", "freddy_song.mp3", "🐻", 110 estado.canal_pasos_freddy 111 ), 112 "Foxy": Animatronico( 113 "Foxy", 7, 12, 2, 5, { 114 7: [6], 115 6: [4, 7], 116 4: [8, 6] 117 }, 118 "foxy_pasos.mp3", "foxy_song.mp3", "🦊", 119 estado.canal_pasos_foxy 120 ), 121 "Chica": Animatronico( 122 "Chica", 2, 10, 3, 6, { 123 2: [1], 124 1: [6, 2], 125 6: [4, 1], 126 4: [8, 6] 127 }, 128 "chica_pasos.mp3", "chica_song.mp3", "🐤", 129 estado.canal_pasos_chica 130 ), 131 "Bonnie": Animatronico( 132 "Bonnie", 2, 9, 3, 6, { 133 2: [6], 134 6: [5, 2], 135 5: [7, 6], 136 7: [4, 5], 137 4: [8, 7] 138 }, 139 "bonnie_pasos.mp3", "bonnie_song.mp3", "🐰", 140 estado.canal_pasos_bonnie 141 ) 142}
15class Animatronico: 16 """ 17 Representa un animatrónico dentro del juego. 18 19 Atributos: 20 nombre (str): Nombre del animatrónico. 21 spawn (int): Posición inicial. 22 posicion (int): Posición actual. 23 ia_level (int): Nivel de IA (1-20). 24 intervalo_min (int): Intervalo mínimo de movimiento. 25 intervalo_max (int): Intervalo máximo de movimiento. 26 rutas (dict): Diccionario de rutas posibles para cada posición. 27 pasos_sonido (str): Archivo de sonido de pasos. 28 cancion_muerte (str): Archivo de sonido de muerte. 29 cara (str): Icono o símbolo que representa al animatrónico. 30 canal_pasos (int): Canal de reproducción de pasos. 31 acelerado (bool): Indica si el animatrónico está acelerado. 32 """ 33 34 def __init__( 35 self, nombre, spawn, ia_level, intervalo_min, intervalo_max, rutas, 36 pasos_sonido, cancion_muerte, cara, canal_pasos 37 ): 38 """ 39 Inicializa un animatrónico con sus atributos y configuración. 40 41 Args: 42 nombre (str): Nombre del animatrónico. 43 spawn (int): Posición inicial. 44 ia_level (int): Nivel de IA. 45 intervalo_min (int): Intervalo mínimo de movimiento. 46 intervalo_max (int): Intervalo máximo de movimiento. 47 rutas (dict): Diccionario de rutas de movimiento. 48 pasos_sonido (str): Sonido de pasos. 49 cancion_muerte (str): Sonido de muerte. 50 cara (str): Representación visual del animatrónico. 51 canal_pasos (int): Canal de audio para los pasos. 52 """ 53 self.nombre = nombre 54 self.spawn = spawn 55 self.posicion = spawn 56 self.ia_level = ia_level 57 self.intervalo_min = intervalo_min 58 self.intervalo_max = intervalo_max 59 self.rutas = rutas 60 self.pasos_sonido = pasos_sonido 61 self.cancion_muerte = cancion_muerte 62 self.cara = cara 63 self.canal_pasos = canal_pasos 64 self.acelerado = False 65 66 def mover(self): 67 """ 68 Mueve al animatrónico a una nueva posición posible según su ruta. 69 70 Freddy solo se mueve a partir de las 3 AM. Para otros animatrónicos, 71 se puede mantener en la misma posición o moverse a otra de sus rutas. 72 73 Reproduce sonido de pasos si se mueve. 74 """ 75 posibles = self.rutas.get(self.posicion, []) 76 if not posibles: 77 return 78 79 # Freddy no se mueve antes de las 3AM 80 if self.nombre == "Freddy" and estado.hora_actual < 5: 81 return 82 83 if self.nombre == "Freddy": 84 nueva_posicion = random.choice(posibles) 85 reproducir_sonido(self.pasos_sonido, canal=self.canal_pasos) 86 else: 87 opciones_movimiento = posibles + [self.posicion] 88 nueva_posicion = random.choice(opciones_movimiento) 89 if nueva_posicion != self.posicion: 90 reproducir_sonido(self.pasos_sonido, canal=self.canal_pasos) 91 92 self.posicion = nueva_posicion 93 94 def regresar_spawn(self): 95 """ 96 Devuelve al animatrónico a su posición inicial (spawn). 97 """ 98 self.posicion = self.spawn
Representa un animatrónico dentro del juego.
Atributos: nombre (str): Nombre del animatrónico. spawn (int): Posición inicial. posicion (int): Posición actual. ia_level (int): Nivel de IA (1-20). intervalo_min (int): Intervalo mínimo de movimiento. intervalo_max (int): Intervalo máximo de movimiento. rutas (dict): Diccionario de rutas posibles para cada posición. pasos_sonido (str): Archivo de sonido de pasos. cancion_muerte (str): Archivo de sonido de muerte. cara (str): Icono o símbolo que representa al animatrónico. canal_pasos (int): Canal de reproducción de pasos. acelerado (bool): Indica si el animatrónico está acelerado.
34 def __init__( 35 self, nombre, spawn, ia_level, intervalo_min, intervalo_max, rutas, 36 pasos_sonido, cancion_muerte, cara, canal_pasos 37 ): 38 """ 39 Inicializa un animatrónico con sus atributos y configuración. 40 41 Args: 42 nombre (str): Nombre del animatrónico. 43 spawn (int): Posición inicial. 44 ia_level (int): Nivel de IA. 45 intervalo_min (int): Intervalo mínimo de movimiento. 46 intervalo_max (int): Intervalo máximo de movimiento. 47 rutas (dict): Diccionario de rutas de movimiento. 48 pasos_sonido (str): Sonido de pasos. 49 cancion_muerte (str): Sonido de muerte. 50 cara (str): Representación visual del animatrónico. 51 canal_pasos (int): Canal de audio para los pasos. 52 """ 53 self.nombre = nombre 54 self.spawn = spawn 55 self.posicion = spawn 56 self.ia_level = ia_level 57 self.intervalo_min = intervalo_min 58 self.intervalo_max = intervalo_max 59 self.rutas = rutas 60 self.pasos_sonido = pasos_sonido 61 self.cancion_muerte = cancion_muerte 62 self.cara = cara 63 self.canal_pasos = canal_pasos 64 self.acelerado = False
Inicializa un animatrónico con sus atributos y configuración.
Args: nombre (str): Nombre del animatrónico. spawn (int): Posición inicial. ia_level (int): Nivel de IA. intervalo_min (int): Intervalo mínimo de movimiento. intervalo_max (int): Intervalo máximo de movimiento. rutas (dict): Diccionario de rutas de movimiento. pasos_sonido (str): Sonido de pasos. cancion_muerte (str): Sonido de muerte. cara (str): Representación visual del animatrónico. canal_pasos (int): Canal de audio para los pasos.
66 def mover(self): 67 """ 68 Mueve al animatrónico a una nueva posición posible según su ruta. 69 70 Freddy solo se mueve a partir de las 3 AM. Para otros animatrónicos, 71 se puede mantener en la misma posición o moverse a otra de sus rutas. 72 73 Reproduce sonido de pasos si se mueve. 74 """ 75 posibles = self.rutas.get(self.posicion, []) 76 if not posibles: 77 return 78 79 # Freddy no se mueve antes de las 3AM 80 if self.nombre == "Freddy" and estado.hora_actual < 5: 81 return 82 83 if self.nombre == "Freddy": 84 nueva_posicion = random.choice(posibles) 85 reproducir_sonido(self.pasos_sonido, canal=self.canal_pasos) 86 else: 87 opciones_movimiento = posibles + [self.posicion] 88 nueva_posicion = random.choice(opciones_movimiento) 89 if nueva_posicion != self.posicion: 90 reproducir_sonido(self.pasos_sonido, canal=self.canal_pasos) 91 92 self.posicion = nueva_posicion
Mueve al animatrónico a una nueva posición posible según su ruta.
Freddy solo se mueve a partir de las 3 AM. Para otros animatrónicos, se puede mantener en la misma posición o moverse a otra de sus rutas.
Reproduce sonido de pasos si se mueve.