Programando un juego de Breakout (Arkanoid) para Android: Parte 4

Creando algunos ladrillos

Como hemos hecho antes para crear una nueva clase selecciona con click derecho la carpeta java y selecciona New|Java class luego selecciona …\app\source\main\java y haz click en OK. Ahora introduce Brick como el nombre para nuestra nueva clase y haz click en OK. Hemos creado una nueva clase de Java en un archivo separado llamada Brick.

Nuestra clase Brick es la más simple de todas. Todo lo que un ladrillo necesita hacer es quedarse ahí y verse como un ladrillo hasta que es pulverizado por una pelota tiempo en el cual debería desaparecer. Sabiendo esto podemos deducir que un brick necesitará un objeto RectF y un boolean para que nuestro motor de juego pueda saber si está destruido o visible.

En la clase de arriba podemos ver que tenemos un RectF como se esperaba y un boolean isVisible. En el constructor, podemos ver que introducimos un número de row, número de column y un width y height para el ladrillo. A continuación, en el constructor inicializamos la ubicación del ladrillo usando el número de row, column, width, height y un pixel de padding (de espaciado) para que podamos distinguir cada ladrillo individual de otros.

Como hemos de esperar rect y isVisible son private así que necesitamos un método getRect y un método setInvisible para cuando un ladrillo sea golpeado por la ball y un método getVisibility el cual nos permitirá chequear el estado de visibilidad de un ladrillo.

Ahora veremos cómo trazamos todos nuestros ladrillos.

Trazando los ladrillos

Para poder administrar nuestros bricks (ladrillos), sería bastante limpio mantenerlos en un array. Declara un array llamado bricks y una variable para realizar seguimiento de su tamaño llamada numBricks añade este código después de la declaración de la ball en la clase BreakoutView.

Tal vez como era de esperarse crearemos nuestros ladrillos en el método createBricksAndRestart. Primero, definimos el tamaño de los ladrillos basados en la resolución de la pantalla e inicializamos numBricks a cero para que podemos monitorear el número de ladrillos que tracemos. Usaremos esta variable en un número de lugares como veremos.

Siguiente, establecemos un bucle for anidado uno exterior para cada columna y el interior uno para cada columna. El código debajo hace un bucle a través de 3 filas con 8 columnas cada una. En el centro de los dos bucles creamos un ladrillo nuevo basado en el número de column, número de row, width y height. Y claro, nuestra clase Brick usará esta información para establecer las coordenadas de cada uno como corresponda. Cada objeto Brick está guardado ordenadamente en nuestro array bricks. Después que declaremos e inicializamos cada ladrillo incrementamos numBricks para monitorear del número de ladrillos en el array. Puedes fácilmente alterar el número de filas y columnas así como el tamaño de los ladrillos y el código funcionará. Añade este código luego del código para resetear la pelota.

Ahora trazaremos todos nuestros bricks, de nuevo usando un bucle for para hacer un bucle a través del array de bricks. Justo antes que lo hagamos cambiamos el color del pincel para hacer nuestros ladrillos de un color diferente de nuestro paddle y ball. Añade este código en el método draw justo después que trazamos la ball. Nota que a medida que hacemos un bucle a través del array de bricks primero chequeamos si getVisibility devuelve true. Solo si lo hace lo ladrillos serán trazados. Nos aseguramos de no accesar a un espacio vacío en el array usando i < numBrickscomo la condición del bucle for.

Ahora podemos correr el juego y ver los ladrillos.

screenshot_2015-05-21-10-47-30-300x180

El problema, por supuesto, es que la pelota atraviesa los ladrillos sin chocarlos. Lo que necesitamos es detectar cuando las cosas se golpean entre sí. Cuando estos eventos de colisión ocurren podemos tomar la acción apropiada. Estas acciones incluyen cosas como la reproducción de sonidos y cambiar la puntuación luego veremos cómo detectar los eventos de colisión.

Programando un juego de Breakout (Arkanoid) para Android: Parte 5