Remake (parcial) de Fruity Frank... 17 - Varias vidas
(Volver al índice)
Ya es el momento de tener varias vidas, que se pierdan al chocar con un enemigo. Además, cuando se acaben todas las vidas, deberemos volver a la pantalla de presentación, y poder empezar una nueva partida.
Lo de perder una vida cada vez que toquemos a un enemigo supone algunos cambios:
- Deberemos llevar un contador de vidas.
- Además, la cantidad de vidas restantes debería aparecer en la pantalla.
- Cuando "nos maten", habrá que llevar a nuestro personaje y a nuestros enemigos a sus posiciones iniciales: si los dejamos donde estaban, posiblemente volverán a colisionar, y perderíamos otra vida más (o incluso varias).
- Según sea la lógica de nuestro juego, también es frecuente que cuando choquemos con enemigo, éste también "muera" (no ocurre así en el caso concreto de Fruity Frank).
- Deberíamos avisar al usuario de que ha perdido una vida, bien sea con una breve animación o con un cartel que se mantuviera en pantalla un par de segundos.
Además, cuando se acaben las vidas deberán ocurrir varias cosas:
- Deberá terminar la partida actual, y volver a la pantalla de presentación.
- Al igual que antes, deberemos avisar al usuario (en este caso, de que la partida ha terminado).
- Deberemos comparar los puntos obtenidos con la máxima puntuación hasta el momento, y actualizarla si procede.
- Deberemos restaurar el mapa de juego inicial, con todos sus obstáculos y sus premios.
- Todos los enemigos deberán volver a estar activos y en sus posiciones iniciales.
De paso, la pantalla de presentación deberá permitir volver a jugar una partida, o bien abandonar el juego por completo.
Esto supone unos cuantos cambios en el fuente:
- Ahora el cuerpo del juego debe ser repetitivo, por ejemplo así:
Juego juego = new Juego();
// Primero inicializo (variables, imágenes, etc)
juego.inicializar();
do {
// Después, pantalla de presentacion
juego.presentacion();
// Y luego, la partida en sí
if (! juego.finDelJuego)
juego.buclePrincipal();
} while (! juego.finDelJuego);
- Es decir, desde dentro de la "presentación" anoto si el usuario ha elegido la opción de salir de la partida ("finDelJuego") o la contraria (empezar a jugar).
- En la presentación se puede tener que entrar al juego (jugar una partida) o tener que abandonarlo. Yo uso una variable "bool" para indicar si hay que seguir repitiendo la presentación o si hay que salir de ella, y otra variable "bool" para indicar si hay que salir de todo el juego:
while (! salirPresentacion )
{
if (TeclaPulsada (TECLA_ESP)) {
salirPresentacion = true;
nuevaPartida();
}
if (TeclaPulsada (TECLA_S)) {
salirPresentacion = true;
finDelJuego = true;
}
...
- (Mi función "nuevaPartida" es la que prepara las variables antes de comenzar una partida: número de vidas, posición de personaje y enemigos, etc).
- La otra dificultad posible es para regenerar el mapa: Hay que tener el mapa guardado en un array, y copiarlo en el array "de uso" antes de empezar cada partida. No se puede hacer "mapa = mapa1;", porque entonces los dos arrays están en la misma posición de memoria, y al modificar uno, se modifica el otro automáticamente, y ya no se podría regenerar el mapa original. Tenemos que hacerlo fila por fila, con un "for":
for (i=0; i<MAXFILAS; i++)
mapa[i] = mapa1[i];
- El resto de cambios en el fuente deberían ser sencillos...
Para más detalles, puedes ver el estado del proyecto en: code.google.com/p/fruityfrank
(Volver al índice)