12 noviembre 2008

Remake (parcial) de Fruity Frank... 16 - Un fuente más modular

Nuestro fuente empieza a tener un cierto tamaño. Para ganar en legibilidad, va siendo el momento de hacer un pequeño replanteamiento, para convertirlo en algo más modular.

El "Main" del programa ya era razonablemente breve. Sólo le vamos a añadir una llamada a función "inicializar", que sea la que se encargue de cargar las imágenes, tipos de letra, etc (las variables se declararán antes, al principio del programa, como veremos un poco más adelante):

public static void Main ()
{
Juego juego = new Juego();
// Primero inicializo (variables, imágenes, etc)
juego.inicializar();
// Después, pantalla de presentacion
juego.presentacion();
// Y luego, la partida en sí
juego.buclePrincipal();
}


Por su parte, el bucle de juego (la función "buclePrincipal"), debería ser mucho más modular de lo que era, y más legible. Resultaría más fácil de mantener se pareciera más a la idea intuitiva de lo que debe hacer cada "pasada" de nuestro juego: dibujar la pantalla, comprobar qué teclas pulsa el usuario (y actuar en consecuencia), comprobar colisiones entre elementos del juego, y calcular la nueva posición de los demás elementos del juego (por ahora, sólo nuestros enemigos), por ejemplo así:

do {
dibujarPantalla();
comprobarTeclas();
comprobarColisiones();
moverEnemigos();
// Pausa de 40 ms, para velocidad de 25 fps (1000/40 = 25)
Pausa(40);
// Fin de la parte repetitiva
} while (! TeclaPulsada (TECLA_ESC));


Eso sí, estas funciones comparten información entre ellas. Podríamos hacer que esa información se pasara como parámetros, o bien que simplemente se tratase de "variables globales" (realmente, atributos de nuestra clase "Juego"), que declaremos antes que todas las funciones:

// Constantes que se usarán en el juego
const int NUMENEMIGOS = 5;
// Tipos de enemigos
const int TIPOENEMIGOPEPINO = 1;
const int TIPOENEMIGONARIZ = 2;

// Variables auxiliares para bucles
short i;
// Limites de la pantalla
short xIniPantalla = 12, xFinPantalla = 638;
short yIniPantalla = 82, yFinPantalla = 448;


A partir de ahora, los cambios que se acercan afectarán menos a otras partes del juego. Se tratará de cambios como: como perder vidas cuando choquemos con un enemigo, un movimiento más inteligente de estos enemigos, poder "disparar", que ciertos obstáculos sean móviles, que haya un tabla de records, etc.

Para más detalles, puedes ver el estado del proyecto en: code.google.com/p/fruityfrank

1 comentario:

Anónimo dijo...

Hola, como estas, tu pagina es excelente, si queres pasate por mi pagina y dejame un comentario, tengo mucho trafico en mi sitio, si te interesa podemos hacer un intercambio de links, banners, cualquier cosa avisame, te dejo mi email tvinternet08@gmail.com, te mando un abrazo.