13 octubre 2008

Remake (parcial) de Fruity Frank... 05 - Un primer enemigo

Vamos a añadir un primer enemigo, cuyo movimiento esté prefijado y sea sencillo. Todavía no comprobaremos si nuestro personaje y el "enemigo" colisionan.

La idea básica es sencilla: tendremos una nueva imagen, que dibujaremos en sus propias coordenadas x e y, y al final de cada pasada calcularemos cual será su nueva posición.

La imagen la extraeremos de una de las capturas del juego, igual que hicimos con la de nuestro personaje. Para cargarla y dibujarla será muy parecido a lo que ya hemos hecho:

    int xEnemigo1=250, yEnemigo1=250;
SDLA_Imagen* enemigo1;
enemigo1=SDLA_cargarImagen("enemigo1i1.bmp");
...
SDLA_dibujarImagenOculta(enemigo1, xEnemigo1, yEnemigo1);


Moverlo no es mucho más difícil: basta con cambiar su coordenada X o su coordenada Y (o ambas) en cada pasada del bucle "do..while". Por ejemplo, como primer acercamiento podríamos hacer que se moviera hacia la derecha con "xEnemigo1 += 3;"

Lo razonable es que no siempre se mueva hacia la derecha (o al menos que lo haga sólo hasta llegar al margen de la pantalla, en vez de seguir avanzando incluso entonces). Un movimiento un poco más real sería que fuera hacia un lado de la pantalla y, cuando llegara a él, "rebotara" para volver hacia el lado contrario. Hay varias formas de conseguir este efecto. Por ejemplo:


  • Tener una variable auxiliar llamada "dirección" que nos permita memorizar hacia qué lado nos movemos. Cuando la "dirección" sea hacia la derecha, aumentaremos la X del personaje; cuando la "dirección" sea hacia la izquierda, disminuiremos la X del personaje; cuando llegue al margen derecho, cambiaremos "dirección" para que sea "hacia la izquierda"; cuando llegue al margen izquierdo, cambiaremos "dirección" para que sea "hacia la derecha".

  • Una alternativa es sumar siempre un incremento a xPersonaje. Este incremento empezará siendo +3 (por ejemplo) para que se mueva hacia la derecha, y cada vez que llegue a un extremo de la pantalla, cambiaremos el signo a ese incremento, para que empiece a desplazarse en sentido contrario. Podría ser algo así:



        xEnemigo1 += incrEnemigo;

if (xEnemigo1 < xIniPantalla)
{
xEnemigo1 = xIniPantalla;
incrEnemigo = -incrEnemigo;
}

if (xEnemigo1 > xFinPantalla-anchoEnemigo1)
{
xEnemigo1 = xFinPantalla-anchoEnemigo1;
incrEnemigo = -incrEnemigo;
}


Si eso está dentro del do..while del "bucle de juego", acabamos de conseguir que nuestro enemigo se mueva en cada "fotograma" del juego, tanto si movemos nuestro personaje como si no lo hacemos.

Como siempre, todo el proyecto está en: code.google.com/p/fruityfrank


(Volver al índice)