CH1 – Galaxian
Primer acercamiento
Build del proyecto (.exe) disponible en: https://www.dropbox.com/scl/fi/c8z0okt82ix99zfvmdch2/Galaxian-game.zip?rlkey=7j8arcacrjen9hsqfpy2nkqtb&st=jo2oicz5&dl=0
Al iniciar el desarrollo de Galaxian V2, me encontré con el primer gran desafío: organizar correctamente la estructura del proyecto. En la versión inicial, la mayor parte de la lógica del juego estaba contenida en un solo archivo, GameplayScreen
, y en un archivo de cabecera donde incluí las clases Enemy
y EnemyManager
. Esta estructura me ayudó a dar los primeros pasos, pero pronto descubrí que mantener y expandir el código en este formato resultaba complicado.
Por eso decidí reconstruir el proyecto, dando vida a una nueva versión: Galaxian V2. Con este enfoque modular, cada componente (jugador, enemigos, proyectiles y pantallas del juego) ahora tiene su propio conjunto de archivos, haciendo que el código sea mucho más mantenible y escalable bajo una arquitectura orientada a objetos. Durante todo el proceso, utilicé Git y SourceTree para gestionar el control de versiones.
Decisiones de Gameplay y Código
A medida que desarrollaba el juego, tomé varias decisiones para mejorar la jugabilidad y hacer el código más claro:
- Cambié la pantalla inicial de “Título” a “Logo” para una introducción más fluida, permitiendo al jugador saltarla con un clic o presionando “INTRO”.
- Añadí mecánicas de jugador con una función de
clamp
para que la nave se mantuviera dentro del área de juego, además de implementar un sistema de proyectiles basado en vectores y con un temporizador de enfriamiento para controlar los disparos. - Opté por que los proyectiles solo aparezcan cuando el jugador presiona la barra espaciadora, mejorando la claridad visual y el control de los disparos.
- Incorporé enfriamientos aleatorios para los disparos enemigos, lo que hace el juego más impredecible y desafiante.
- Decidí mostrar las vidas en la esquina inferior izquierda, permitiendo al jugador ver fácilmente esta información esencial sin distraerse del gameplay.
- Ajusté el sistema de puntuación para que el jugador pierda 100 puntos cuando es golpeado, incentivando un juego más limpio; también hice que el puntaje se muestre en la pantalla final.
- Actualicé el texto de las instrucciones en el menú de opciones para reflejar con precisión las mecánicas del juego.
- Finalmente, añadí música de fondo y efectos de sonido (SFX) descargados de Pixabay y modifiqué ligeramente algunos sprites en Photoshop para darle al juego un aspecto propio.
Conclusiones y Retos
Desarrollar Galaxian ha sido una experiencia tan desafiante como gratificante. Con mi limitada experiencia en C++, entender la arquitectura orientada a objetos y la plantilla proporcionada fue un obstáculo, y me hubiera ayudado tener una explicación más detallada junto con los recursos iniciales. A veces, los ejemplos en el GitHub del curso y en la solución de la CAA1 diferían bastante de la estructura de la plantilla, lo que complicó el proceso de aprendizaje.
A pesar de estas dificultades, trabajar en la gestión de texturas, implementar mecánicas para el jugador y comprender los alcances de las variables en una estructura orientada a objetos ha sido un aprendizaje valioso y un paso importante en mi desarrollo.
Trabajar en este proyecto ha sido una excelente manera de explorar programación gráfica y desarrollo de videojuegos en C++. Si buscas mejorar en este lenguaje y enfrentarte a un proyecto modular, ¡Galaxian V2 es un reto que recomiendo sin duda!
Recursos
- Raylib Cheatsheet
- Yesteryear – Google Fonts
- El contenedor vector — Fundamentos de Programación en C++
- Rendering Textures and Playing Audio in Raylib – YouTube
- Conversación con ChatGPT para ayuda en recursos, corrección de errores y limpieza de código: ChatGPT