- ANTES QUE NADA
- PREPARACIÓN
- COMIENZO
- RECURSOS
- MENSAJES Y DEBUG
- PINTADO
- COMPILACIÓN Y EJECUCIÓN
- CONCLUSIÓN
ANTES QUE NADA
Esta serie de tutoriales se van a estructurar de la siguiente manera: en cada entrega habrá un demo interactivo hasta llegar al final, en la cual estará el juego que terminaremos haciendo.Hay que tener en cuenta que todo el código que estaremos usando no es nada nuevo, sino que son las mismas funciones ya vistas de la API de SDL.
Lo que sigue a continuación es una especie de paso a paso de las cosas que hago cuando empiezo a hacer un juego desde cero. Esto no quiere decir que sea la única manera de hacerlo, ni que hacerlo de otra manera estaría 'mal'. Lo que digo es que esta es la manera que me funciona a mi.
Todos los archivos fuentes mencionados se encuentran en este zip: robots.zip.
PREPARACIÓN
El juego que vamos a realizar es un juego que usualmente juego cuando tengo 5 minutos al dope; el juego en cuestión se llama 'robots' y es un viejo juego de Unix que lo volvieron a hacer para el GNOME, (manejador de ventanas de GNU/Linux).Hacer un juego que ya existe tiene sus ventajas porque no tenemos que pensar el gameplay del juego (que en realidad es una de las cosas más difíciles).
COMIENZO
archivos: robots.c y robots.h
Es recomendable utilizar una visión top-down (o de arriba hacia abajo) al ir haciendo el juego. Esto quiere decir que primero vamos a hacer una estructura general la cual va a contener el juego.
Lo primero que hice fue hacer un main con unas pocas funciones vacías: iniciar, salir, y después la estructura del gameloop; estas funciones 'vacías' después las vamos a ir completando con el código que queremos que el juego haga.
El gameloop va a contener 2 funciones globales: actualizar y pintar.
Cuando actualicemos vamos a calcular todo lo necesario y va a dejar todo preparado para pintar un cuadro del juego.
RECURSOS
archivos: recursos.c y recursos.h
Este modulo se encargará de administrar los gráficos y sonidos de un juego; siempre vamos a tener algo parecido a esto.
Las responsabilidades de este modulo son las de guardar en memoria, liberar y ofrecer en demanda los recursos necesarios. En este caso solo necesitamos una sola imagen, que son todos los personajes y efectos que vamos a tener.
MENSAJES Y DEBUG
archivos: comunes.c comunes.h
Siempre es bueno mientras estemos en desarrollo poner algunos mensajes informativos sobre lo que esta ocurriendo. Y después poderlos sacar fácilmente para cuando el juego este listo. Esto lo hacemos directamente con un #define.
PINTADO
archivos: graficos.c y graficos.h
El modulo llamado gráficos tiene toda la información de como deben pintarse las distintas partes del juego.
Para comenzar podemos siempre hacer la mínima funcionalidad requerida, como por ejemplo mostrar el personaje que vamos a usar en pantalla para ir viendo si estamos haciendo las cosas bien; ¿qué cosas bien?: la carga de los recursos y las distintas variables que nos indican como debemos pintarlo y posicionarlo en la pantalla, por ejemplo.
Por ahora solo tenemos estas 2 funciones: pintar_fondo y pintar_personaje. Mas adelante iremos teniendo mas a medida que las necesitemos.
COMPILACIÓN Y EJECUCIÓN
Si quieren ejecutar la demo, les dejo 2 ejecutables, uno para Linux (robots) y otro para Windows (robots.exe).
Si quieren compilar la demo, para Linux les dejo un Makefile, solo escriban 'make' en una consola y listo. Para Windows se van a tener que crear un proyecto a mano.
CONCLUSIÓN
Como podrán ver si compilan y ejecutan el código este, el resultado final no es algo muy distinto al segundo tutorial: solo una ventana abierta con una imagen en ella. Pero, si miran el código verán que no esta todo metido en un solo archivo, sino que esta repartido por funcionalidad; además de que estamos dejando todo listo para "completar los blancos" e ir construyendo nuestro juego sin tener que modificar mucho la estructura del código.
Bueno, por ahora dejamos acá; mi recomendación es que entiendan bien el código que vamos escribiendo, así no se les complica para las próximas entregas, y si tienen alguna duda, me pueden mandar un e-mail o dejar el comentario aquí mismo.
