Prototipo de Juego de Ritmo
Introducción
Como parte del proyecto final de mi formación profesional, me embarqué en el desarrollo de un juego de ritmo multijugador en línea. Aunque las circunstancias requirieron reducir el alcance del proyecto, el prototipo resultante demuestra habilidades técnicas en desarrollo de juegos, programación de audio y gestión de proyectos.
Nota: Debido a que proyecto pertenece a mi centro de FP, el código fuente y la documentación no pueden divulgarse a menos que se publiquen oficialmente. Este artículo se centra en el enfoque técnico y los aprendizajes del proceso de desarrollo.
Descripción del Proyecto
¿Por qué un Juego de Ritmo?
La elección de desarrollar un juego de ritmo fue una decisión impulsada por mí, ya que combina múltiples áreas de interés y creo que puede abrirme el camino a desarrollar el perfil profesional que estoy buscando:
- Aplica de forma práctica conocimientos de audio a través de la programación
- Integra elementos musicales con mecánicas de juego
- Es una oportunidad de explorar los desafíos que enfrentan los programadores de video-juegos
- Puede ser la base para una futura exploración en programación de juegos, gráficos y audio
Características Principales
El prototipo implementa de forma satisfactoria las siguientes funcionalidades:
- Mecánicas principales similares a Groove Coaster
- Sistema personalizado de eventos de notas usando archivos
MIDIJSON - Sincronización precisa entre audio y gameplay
- Sistema de puntuación y evaluación de notas
- Interfaz de usuario con instrucciones
- Object pooling de notas para mejorar el rendimiento
Aquí tenéis una pequeña demo del proyecto:
Decisiones Técnicas y Desafíos
Elección del Motor Godot
La decisión de usar el Motor Godot se basó en varios factores:
- Eficiencia en recursos, funciona bien en máquinas con RAM limitada
- Mejoras recientes en Godot 4.0
- Naturaleza open-source que encaja con mis preferencias personales
- Capacidades de prototipado rápido
- Documentación sólida y soporte de la comunidad
Exploré otras opciones, como desarrollar el juego sin ayuda de un motor y utilizando librerías como Raylib, sin embargo el tiempo para el desarrollo de este proyecto era muy ajustado.
Diseño de Componentes
La arquitectura del juego aprovecha el sistema basado en nodos de Godot, enfatizando la modularidad y mantenibilidad:
- GameManager (Node2D)
- Coordinador central de todos los sistemas
- Gestiona estado del juego e interacciones
- Maneja sincronización rítmica y reproducción de audio
- Procesa datos JSON para información de canciones y notas
- AudioManager (Node)
- Gestiona reproducción de audio
- Proporciona información precisa de temporización
- NoteManager (Node)
- Analiza y gestiona datos de notas desde archivos JSON
- Controla spawning y movimiento de objetos de notas
- Procesa notas según posición actual de reproducción
- BeatManager (Node)
- Sincroniza eventos del juego con el ritmo de la canción
- Emite señales siguiendo pulsos y compases
- HUDManager (Node)
- Actualiza los elementos de la interfaz de usuario
- Maneja barras de progreso, indicadores de ritmo y la cuenta atrás
Flujo de Datos y Procesamiento
- Los datos de las canciones se cargan desde archivos JSON
AudioManager
inicia la reproducción y proporciona el tiempo actual del sampleNoteManager
procesa notas según el tiempo actualBeatManager
rastrea el ritmo y emite señalesGameManager
procesa entrada del jugador y verifica aciertos/fallos
Superando Obstáculos Técnicos
Sincronización de Audio
Uno de los desafíos críticos fue lograr una sincronización precisa entre eventos de audio y gameplay:
- Investigué inicialmente los sistemas de reloj de osu-framework y StepMania
- Implementación final usando la sincronización nativa de Godot
- Finalmente se redujo de varianza de sincronización de ~30ms a ~4ms
Integración MIDI
- Estudié la especificación del formato MIDI
- Finalmente se utlizó un conversor de MIDI a JSON como solución provisional
Proceso de Desarrollo
Mantuve prácticas profesionales de desarrollo:
- Control de versiones Git
- Implementé de tablero Trello con metodología Kanban
- Integré de Discord para seguimiento automatizado
- La documentación se actualizaba conforme se desarrollaba el proyecto
Logros
Logros Técnicos
- Implementación exitosa de mecánicas de juego de ritmo
- Sincronización precisa de audio
- Sistema eficiente de gestión de notas
- Arquitectura extensible para futuras iteraciones
Desarrollo Profesional
- Gané experiencia en resolución de problemas
- Mejoré mi capacidad de adaptación a cambios de requisitos
- Gané experiencia en prototipado rápido
- Mejoré en habilidades de documentación técnica
- Mejoré mis técnicas de depuración y optimización
Futuras Iteraciones del Proyecto
Hay muchas funcionalidades que me gustaría implementar:
- Implementación de un sistema personalizado para trabajar con MIDI
- Mejorar el sistema de feedback visual
- Integrar funcionalidades multijugador
- Desarrollo del editor de niveles
- Optimización de rendimiento
- Implementación de mecánicas adicionales
Conclusión
Este proyecto, a pesar de sus desafíos, ha sido una experiencia significativa de aprendizaje. Ha mejorado no solo mis habilidades técnicas en desarrollo de juegos, sino también mi capacidad para tomar decisiones informadas sobre herramientas y arquitectura, gestionar proyectos complejos, adaptarme a circunstancias imprevistas y encontrar soluciones a desafíos técnicos.
El prototipo resultante, aunque no es el juego multijugador originalmente previsto, sirve como base sólida para desarrollo futuro y es una prueba de mi resiliencia al lograr crear algo a pesar de los contratiempos tan importantes que atravesó el proyecto.