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}
class Animatronico:
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.

Animatronico( nombre, spawn, ia_level, intervalo_min, intervalo_max, rutas, pasos_sonido, cancion_muerte, cara, canal_pasos)
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.

nombre
spawn
posicion
ia_level
intervalo_min
intervalo_max
rutas
pasos_sonido
cancion_muerte
cara
canal_pasos
acelerado
def mover(self):
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.

def regresar_spawn(self):
94    def regresar_spawn(self):
95        """
96        Devuelve al animatrónico a su posición inicial (spawn).
97        """
98        self.posicion = self.spawn

Devuelve al animatrónico a su posición inicial (spawn).

animatronics = {'Freddy': <Animatronico object>, 'Foxy': <Animatronico object>, 'Chica': <Animatronico object>, 'Bonnie': <Animatronico object>}