Descripción - EdwinESM/Codec-de-Audio GitHub Wiki
Descripción del código
- Primero se importan las librerias necesarias para gráficos, sonido, y manejo de errores, todas estan vienen de la libreria principal "Pygame".
- Se inicia el sistema de sonido y en las siguientes dos líneas hay advertencias en caso de que no se puede usar fuentes o audio.
- main_dir: es la ruta donde está este script.
- data_dir: es la carpeta donde están imágenes y sonidos.
- Esta función carga una imagen desde una ruta específica.
Si colorkey = -1, hace que el fondo de la imagen sea transparente (set_colorkey para manejar transparencia).
- Representa un sprite controlado por el mouse (Puede golpear).
- Un sprite es un objeto que representa un personaje, enemigo, objeto o cualquier elemento visible que tiene comportamiento propio.
- Sigue el ratón (update()).
- Tiene una animación de golpe (punch()) y vuelve a la posición original (unpunch()).
- Sprite que camina de lado a lado y gira cuando lo golpeas.
- En el método init, se carga la imagen del mapache (chimp.bmp) y se coloca en la esquina superior izquierda de la pantalla, después se define la velocidad de movimiento horizontal (self.move = 9) y una bandera dizzy que indica si el mono está girando (cuando recibe un golpe).
- En el método update(), se revisa si el mapache está mareado (self.dizzy > 0). Si es así, se llama al método privado _spin() que hace girar la imagen. Si no, se llama a _walk() para mover al mono horizontalmente. *El método _walk() mueve al mapache de izquierda a derecha. Si choca con los bordes de la pantalla, cambia de dirección y voltea la imagen horizontalmente usando pygame.transform.flip().
- El método _spin() hace girar la imagen del mapache como si estuviera mareado. Usa pygame.transform.rotate() para rotar la imagen paso a paso hasta completar un giro completo de 360°. Después, vuelve a su estado normal.
- El método punched() se activa cuando el mapache recibe un golpe (cuando el puño lo toca). Solo si no está ya mareado, empieza la animación de giro (self.dizzy = 1) y guarda la imagen original para poder restaurarla más tarde.
- En la línea pygame.init() se inicializan todos los módulos de Pygame necesarios para correr el juego (gráficos, sonido, etc.).
- Luego, se configura la ventana principal con pygame.display.set_mode((468, 60)) y se oculta el cursor del mouse con pygame.mouse.set_visible(0). También se le asigna un título con pygame.display.set_caption().
- Se crea una superficie de fondo (una "imagen" vacía del tamaño de la ventana) y se llena con color blanco usando background.fill((250, 250, 250)).
- Luego, se copia ese fondo sobre la ventana con screen.blit(background, (0, 0)) y se actualiza la pantalla con pygame.display.flip().
- Se crea un reloj con pygame.time.Clock() para controlar la velocidad del juego (en cuadros por segundo), y se cargan los sonidos whiff.wav (fallo) y punch.wav (golpe).
- Se instancian los objetos del juego:
chimp = Chimp() crea el mapache, fist = Fist() crea el puño, y ambos se agrupan en allsprites para manejarse como conjunto de sprites.
- Se ejecuta continuamente mientras going sea True.
- Controla la velocidad del juego con clock.tick(60) (60 FPS).
- Escucha eventos del usuario:
Cierra el juego si se presiona ESC o se cierra la ventana. Si se hace clic:
Si el puño golpea al mapache → se reproduce el sonido de golpe y el mapache gira. Si no lo golpea → se reproduce el sonido de fallo. Al soltar el clic, el puño regresa a su posición.
- Actualiza los movimientos del mapache y el puño (allsprites.update()).
- Redibuja la pantalla con el fondo y los sprites actualizados.
- Cuando el usuario cierra la ventana o presiona Escape, se sale del bucle y se ejecuta pygame.quit() para cerrar correctamente todos los módulos de Pygame.
- Cuando el script se ejecuta llama a la función main.