A.8. Proyecto: Juego
8.1. Vamos a implementar un clon del clásico Frogger.
En el directorio Cochedrilo
de las plantillas de la sesión
se encuentra una base sobre la que se puede implementar el juego. En esta plantilla
tenemos:
- Recursos necesarios: imágenes y fichero con los datos de las fases.
- Clase con los datos del juego (
CommonData
). En ella tenemos
toda la información acerca del tamaño de los sprites,
las secuencias de frames de las animaciones, sus coordenadas iniciales,
etc.
- Clase del MIDlet principal (
MIDletCDrilo
).
- Pantalla splash (
SplashScreen
).
- Clase para la gestión de los recursos (
Resources
).
- Clase que implementa un ciclo de juego genérico (
GameEngine
).
- Pantalla de titulo (
TitleScene
) e interfaz para las escenas
del juego (Scene
).
- Pantalla de juego (
GameScene
) vacía. Deberemos implementar
la lógica y la presentación del juego en esta clase.
Debemos:
a) Crear las estructuras de datos necesarias para cargar la información
sobre las fases. Los datos de cada fase son los siguientes:
- Título de la fase
- Carriles de la carretera. Para cada carril tendremos los siguientes datos:
- Velocidad de los coches que circulan por él.
- Separación que hay entre los coches del carril.
- Tipo de coche que circula por el carril.
Estos datos se encuentras codificados en el fichero de datos de fases (stages.dat
)
de la siguiente forma:
<int> Numero de fases
Para cada fase
<UTF> Titulo
<byte> Número de carriles
Para cada carril
<byte> Velocidad
<short> Separación
<byte> Tipo de coche
Deberemos añadir a las clases que encapsulen estos datos métodos
para deserializarlos de este fichero.
Introducir código en Resources
para cargar esta información
y añadir los datos de niveles como recurso global de nuestro juego.
b) Añadir el sprite de nuestro personaje. Hacer que
el sprite se mueva por la pantalla como respuesta a las pulsaciones
del cursor.
c) Añadir un fondo a la escena. El fondo se construirá
utilizando un objeto TiledLayer
. Utilizaremos la información
sobre el número de carriles de la fase actual para generar este fondo.
d) Añadir los coches a la escena. Los coches deben aparecer
a la izquierda y avanzar hacia la derecha. En cada carril los coches se generarán
de distinta forma. Cada carril tiene los siguientes atributos:
- Velocidad: Los coches que circulen en dicho carril irán a la velocidad
indicada. La velocidad se mide en pixeles que avanzan los coches en cada tick.
- Separación: El espacio en pixels que queda entre un coche y el siguiente
que aparece. Podemos implementar esto creando un contador para cada carril,
que controle en qué momento debe hacer aparecer un nuevo coche en dicho
carril. Por ejemplo, si tenemos un carril cuya velocidad es 3 y la separación
80, inicializaremos el contador a 80 y en cada tick lo decrementaremos en
3 unidades. Cuando el contador llegue a 0 haremos aparecer un coche y le sumaremos
80 para volver a empezar a contar lo que queda para aparecer el siguiente
coche.
- Tipo de coche: En cada carril circulará un tipo de coche distinto.
Tenemos definidos 3 tipos, cada uno de ellos con distinto aspecto y tamaño.
Según el tipo (0, 1 ó 2) crearemos el sprite del coche utilizando
una imagen distinta.
e) Implementar el resto de funcionalidades del juego:
- Comprobar colisiones de los coches con nuestro personaje. Cuando esto suceda
perderemos una vida y volverá a comenzar el nivel. En el caso de que
no queden vidas, terminará el juego.
- Comprobar si el personaje ha cruzado la carretera para pasar de fase. Cuando
hayamos llegado al otro lado de la carretera pasaremos a la siguiente fase.
Si fuese la última, podríamos hacer que vuelva al comienzo del
juego (primera fase).