Codificar un juego tipo Space Invaders para Android: Parte 7

Inicializando, dibujando y actualizando a los invaders

Ahora, como siempre, necesitamos agregar códigos para los lugares relevantes en SpaceInvadersView para traer a nuestro ejercito de objetos Invader a la vida.

Fijate como entregamos filas cambiantes y número de columna a casa objeto de Invader sucesivamente en nuestra formación. Y mantenemos el registro del número global de objetos Invader en nuestra formación al incrementar numInvaders. Ingresa el siguiente código en el método prepareLevel en el lugar indicado por los comentarios.

El siguiente bloque de código el cual actualiza nuestra formación de invaders en cada cuadro es muy largo pero cuando se examina detenidamente no es nada complicado. Primero, hacemos bucles en cada uno de los invaders y revisamos si está visible. Si sí lo está, llamamos a su método update y sus coordinadas se actualizarán. A continuación, llamamos takeAim a todos y cada uno de los invaders en nuestra formación.

Usando las probabilidades y el criterio para apuntar que se especificó en el método takeAim, puede que si o puede que no regrese a true. Si regresa a true entonces llamamos a shoot en la siguiente bala en la formación como se identificó por nextBullet. Si la bala se disparó exitosamente, nextBullet aumenta su preparación para el invader siguiente. Entonces revisamos si nextBullet es igual a maxInvaderBullets y si sí, entonces establecemos nextBullet otra vez en 0.

De regreso a takeAim, si está bloqueado, revisamos si el invader ha tocado cualquier lado de la pantalla, y si sí lo ha hecho, establecemos bumped a true.

Ingresa el código que acabamos de ver en el método update en el lugar indicado por los comentarios.

El siguiente código maneja el cómo son activados los invaders para bajar y seguir su camino hacia el otro lado. También disminuye el valor de menaceInterval para hacer que el aleteo del brazo del invader y los sonidos amenazantes sean más frecuentes aunque tenemos que hacen un poco más de codificación antes de que surta efecto.

Ingresa este código en el método de update inmediatamente después del último bloque en el lugar indicado por los comentarios.

Ahora dibujamos a los invaders, pon atención al código que usamos para cambiar entre los dos diferentes cuadros de animación. Vamos a hacer este código completamente funcional en la sección “Sincronizando a la animación y al sonido amenazador”.

Ingresa este código en el método draw en el lugar indicado por el comentario.

Ahora podemos correr el juego y ver a los invaders moverse de un lado al otro y bajar todo el tiempo.

Los "Space Invaders" junto con la nave espacial y los invaders dibujados en la pantalla
Los Space Invaders junto con la nave espacial y los invaders dibujados en la pantalla

Por el momento, sin embargo, no están aleteando sus brazos ni estan haciendo sonidos amenazadores. Vamos a resolverlo.

Sincronizando a la animación y al sonido amenazador

Implementa la reproducción del sonido uh-oh al agregar este código justo al final del método run (dentro del paréntesis de llave). Esto también activará a los invaders a empezar a aletear sus brazos. El código simplemente alterna el valor de uhOrOh basado en el siempre decresiente (y por lo tanto más frecuente) valor de menaceInterval.

Inicializa la amenazante variable en el método prepareLevel.

Ya puedes jugar el juego y reproducir el sonido amenazador y el aleteo de los brazos de los invaders irán más rápido con cada pasada a través de la pantalla. Fijate que los invaders solo dispararán diez balas y que el jugador una antes de que ya no se pueda disparar. En breve haremos algo sobre la detección de impactos y el reinicio de balas en los eventos apropiados para arreglar esto.

Pero antes vamos a construirle al jugador algunas guaridas destruibles.