Mejorando el juego: Neon Gaia Super Defender

Sí, ya he bautizado el juego. Tras un arduo y exhaustivo proceso de brainstorming en el que sólo he participado yo, he decidido llamarle, por lo menos por ahora, Neon Gaia Super Defender. Neon Gaia será el nombre del mecha protagonista y Super Defender la típica coletilla que se pone siempre en los títulos de los juegos de este estilo. ¿El origen?, ni yo mismo lo sé así que no me voy a inventar ninguna justificación :D.

Entrando ya en el terreno de desarrollo, tras continuar y acabar ya con algunos de los tutoriales que mencioné en la entrada anterior y pasar el código basico a POO (siguiendo en parte otro tutorial de la misma persona, y digo en parte porque algunos detalles no me acababan de gustar),  ya tengo una estructura básica para poder empezar a añadir funcionalidades al juego de forma sencilla. En la siguiente imagen se puede ver un diagrama de las clases básicas que manejo por el momento, aunque me falta añadir otras muchas para mejorar el planteamiento del tutorial, creando, por ejemplo, una clase para gestionar los controles u otra para gestionar los enemigos (cuándo aparecen,cómo, etc.), ya que por ahora está todo metido a saco en el main, cosa que no me convence en absoluto porque dificulta bastante la lectura y entendimiento del código.

ClassDiagram2

Básicamente para los objetos del juego hay una clase genérica, GameObject, de la que heredan las demás: NeonGaia que es el robot del jugador, Background para gestionar los fondos, Explosion para las explosiones y otras de las que por ahora solamente hereda una clase en cada caso, Enemy para los enemigos y Weapon para las armas del Neon Gaia y seguramente en un futuro también para las de los enemigos.

Una vez hecho esto pensé que era mejor pasar un rato mejorando el aspecto gráfico para que no fuera tan deprimente y el resultado ha sido este (el vídeo se ve mejor en Youtube con el reproductor grande o a pantalla completa):

Por ahora, mientras no haga mis propias sprites salchicheras voy a dejar las del Hyper Dyne (el juego de Capcom que puse en la entrada anterior) que se ven un poco pequeñas para las pantallas de hoy en día si no se amplían (32×32 píxels). El fondo es un trozo de una imagen de una zona de la Vía Láctea tomada por el telescopio Spitzer de la NASA (un poco pesada quizás) y la música y los efectos de sonido lo saqué de OpenGameArt, de los usuarios FoxSynergy y dklon respectivamente. Esto representaría la estructura típica de un nivel, con la parada del scroll al final donde supuestamente se encontraría el jefe de la fase.

Los siguientes pasos serán, en primer lugar corregir un par de bugs que he visto grabando el vídeo: las explosiones destruyen enemigos (doh!) y cuando el Neon Gaia toca una explosión el juego se cuelga salvajemente y empieza a reservar más memoria que la que dicen que tienen los elefantes. Posteriormente ya entraré en las mejoras de la estructura del código que mencioné antes y crear máquinas de estados para controlar el desarrollo del juego y de sus objetos. También estoy pensando en posibles armas y enemigos.

Un saludo de vuestro amigo y vecino.

P.D.: Como novedad en esta entrada he dejado de poner la coletilla “Spidey blablabla” en el título ya que realmente es absurdo teniendo unas cosas tan bonitas como son las etiquetas de categorías y los tags. Además así se ve el título de la entrada de un vistazo y ocupa menos 😀

Spidey Developer: Primeros pasos con Allegro

En la anterior entrada de esta temática comentaba que había decidido comenzar esta idea empleando la librería Allegro. Tras buscar un poco por su wiki encontré un videotutorial bastante interesante sobre el desarrollo de juegos en 2D con Allegro hecho por un tal Mike Geig, que está accesible aquí.

Este tutorial introduce los diversos componentes de la librería Allegro, desde lo más básico, como puede ser la creación de ventanas de un determinado tamaño en el sistema operativo, las primitivas básicas para crear gráficos o cómo manejar la interacción con los usuarios a través de periféricos de control típicos como ratón y teclado. Además, también trata algunos temas genéricos como la animación de sprites, el tratamiento de colisiones y las diversas formas en las que se puede llevar a cabo o el uso de máquinas de estados para controlar el comportamiento del juego y sus elementos.

Como ejemplo durante el  tutorial se crea un típico juego matamarcianos con vista lateral en el que el objetivo es destruir el mayor número posible de asteroides que avanzan irremediablemente hacia la Tierra. Aunque tenía una idea vaga para un posible juego, ver éste y que era realmente sencillo de programar, pensé que, ya que el tutorial me facilitaba mucho el trabajo y el esfuerzo, lo mejor era empezar por un juego de este estilo para después apuntar más alto. Además, esta decisión hizo que se me ocurrieran nuevas ideas para combinar con las que tenía de antes.

Cuando decidí empezar a hacer un shooter clásico espacial me acordé de un juego con el que me divertía en el MAME hacía tiempo. Un juego que no tenía nada de especial pero que me había llamado la atención porque se manejaba un robot controlado por un humano que se podía combinar con otro (desde siempre me han apasionado) y con el que te enfrentabas a una invasión extraterrestre (historia nada recurrida en el género :D). Me costó encontrar el juego porque no me acordaba del nombre pero al final conseguí dar con él. A continuación enlazo un vídeo con un gameplay del Side Arms Hyper Dyne, de Capcom .

Así que, tras ponerme manos a la obra he llegado hasta aquí y he grabado un pequeño vídeo en el que se puede ver lo super básico que es el juego por ahora (sí, soy muy malo y con vidas estaría muerto en nada):

Los cambios realizados sobre el tutorial son mínimos: básicamente estuve jugando un poco para probar las primitivas gráficas con el objetivo de crear el robotito que se controla y cambié parcialmente el control para poder alternar el disparo apuntando con el ratón sin mover la nave con una pequeña cruceta, a modo de elección de arma alternativa. Los controles son muy simples: se mueve el robot con las teclas W, A, S y D, como es común, se alterna entre los dos tipos de “armas” pulsando la tecla Q, se dispara con el botón izquierdo del ratón y se apunta la cruceta también con el ratón.

La detección de colisiones es muy básica y sólo tiene en cuenta si se encuentran dos rectángulos que rodean a los objetos robot, bala y asteroide. Cuando una bala le da a un asteroide se destruye y lo mismo cuando un asteroide le da al robot, aunque en este caso se pierde una vida, al igual que si un asteroide consigue atravesar intacto toda la pantalla.

En el tutorial se hace todo con programación procedimental clásica así que ahora mismo lo estoy pasando todo a clases para que sea más sencillo de manejar  y para añadir fácilmente nuevos objetos, armas, etc. Para la próxima entrada sobre juegos a lo mejor me animo a meter algo de código por si a alguien le apetece probar algo, incluso un mini tutorial si me veo con ánimos :).

Un saludo de vuestro amigo y vecino.