• No se han encontrado resultados

Este método lo implementa la Activity principal Proyecto, pudiendo determinar con él mediante la interpretación de los resultados, cuál ha sido la causa que ha llevado a finalizar Videojuego y actuar conforme a ésta.

Exceptuando el caso que el usuario pausé la partida y salga de ésta, las causas que se explican a continuación de finalización de la Activity Proyecto, muestran un Dialog personalizado, el cual sigue la estética de colores y fuentes del videojuego con distinta información y opciones.

 El usuario completa un escenario para que el sistema proceda a cargar el siguiente: es el método Ganar de la clase Lógica quien realiza las siguientes acciones: crea un Intent con un boolean llamado “ganar” puesto a true añadido como información extra, devuelve el resultado RESULT_OK más el Intent anteriormente creado a Proyecto, para posteriormente finalizar la Activity Videojuego.

Proyecto una vez cerrada la Activity Videojuego, regresa a primer plano y por haber iniciado esta última de modo que se espera que devuelva resultados, actúa el método onActivityResult anteriormente mencionado. Para determinar que se ha finalizado Videojuego por la causa mencionada, se comprueba si el código recibido (requestCode) es el 1111, si el resultado (resultCode) es de tipo RESULT_OK, los datos que devuelve el Intent (data) es el boolean “ganar”

siendo su valor true y si por último la variable global de Proyecto numeroEscenario es inferior a numMaxEscenario-1.

97 Figura 83. Completar escenario

Después de haber realizado todos los pasos anteriores e interpretado los datos que se devolvían, se muestra la ventana superior. Es un Dialog personalizado cuya distribución se obtiene a partir del recurso XML dialogo_pantalla.xml. Está formado por el icono de la aplicación, el titulo de la ventana, un TextView que obtiene su contenido a partir del fichero strings.xml y un Button cuya pulsación provoca que incremente la variable de numeroEscenario, cierre la ventana, produzca de nuevo la carga de todos los elementos y del siguiente escenario.

La ventana tiene asociado un escuchador de eventos de botones físicos, que mediante la pulsación de la tecla del dispositivo móvil, permite al usuario si no quiere seguir con la partida, volver al menú principal, pero incrementándose de todas formas la variable numeroEscenario y de este modo no perder el avance conseguido.

 El usuario supera el último escenario del videojuego por lo que ha finalizado la totalidad de éste: se actúa en su totalidad de igual forma que en el anterior caso, excepto por la salvedad de que la última comprobación que se realiza es lo que la diferencia. En este caso, si la variable global numeroEscenario es igual a numMaxEscenario-1 quiere decir que el usuario se encontraba en el último escenario y lo ha superado.

Figura 84. Completar juego

Si se ha culminado de forma acertada todas esas comprobaciones, se muestra un Dialog personalizado equivalente al caso anterior pero diferenciándose en que el texto que se muestra es referente a la causa que ha provocado la finalización de la Activity Videojuego. También, el botón mostrado realiza el cierre de la ventana, provocando que se vuelva a mostrar el menú principal, y el reinicio de

98

la variable numeroEscenario, del mismo modo que si se pulsa el botón físico de la plataforma.

 El usuario es eliminado del juego por producir que el personaje que maneja choque con los enemigos, con las piedras que descienden, caiga de la plataforma o sobre los objetos punzantes dispuestos en el escenario: en este caso, es a través del método Morir de Lógica que crea el Intent como en los casos anteriores, añadiendo el mismo boolean “ganar” pero con su valor puesto a false.

Una vez en el método onActivityResult de Proyecto, se realizan las comprobaciones y cuando se analice el contenido extra del Intent recibido se observará que su valor es false, por lo que se determina que se ha dado el caso de eliminación del personaje, mostrándose el siguiente Dialog cuya distribución es configurada a partir del recurso XML dialogo_morir.xml:

Figura 85. Jugador eliminado

Está formada por el icono de la aplicación, el titulo de la ventana, texto referente a la causa que provoca la finalización de la Acitivity Proyecto y dos botones. El botón Aceptar que se observa, inicia de nuevo la carga del escenario en el que se produjo la eliminación del usuario y cierra la ventana, mientras que el botón Cancelar o la pulsación del botón físico , cierra la ventana provocando que se muestre el menú principal de Proyecto que se encontraba a la espera.

 BUCLE PRINCIPAL

Una vez explicadas las condiciones de finalización del bucle principal de la aplicación y consecuentemente de la Activity Videojuego, se procede a exponer en orden los procesos que conforman el método lógica de la clase Lógica que es llamado sucesivamente en el bucle principal del videojuego.

99 Figura 86. Clase Lógica

1. COLISIONES

La detección de colisiones es uno de los aspectos más importantes y necesarios de un videojuego. Sin estas comprobaciones un personaje podría atravesar una pared, un disparo no afectaría al enemigo o un campo de futbol no tendría límites.

Existen muchas y variadas formas de realizar la detección de colisiones, pero las condiciones en las que se ha desarrollado este juego, ha posibilitado en cierta manera el proceso.

El escenario, como se ha explicado anteriormente, se representa mediante el array tridimensional mundo[][][] anteriormente explicado. Cada uno de los valores guardados en él representa un elemento del escenario, pudiendo ser una plataforma, un objeto pincho, una llave o la meta del escenario.

Si se utiliza como índices las posiciones del protagonista, de los enemigos o de los meteoritos en la matriz mundo[][][], determinando qué valor se tiene guardado en él, se sabrá si en la posición donde se encuentra o en su alrededor, existe plataforma o si se podrá avanzar en el sentido que se desee. El siguiente código es un ejemplo de cómo proceder de este modo:

if(Escenario.mundo[(int)(damePosX()+0.75f)][(int)damePosY()+3]

[(int)damePosZ()-1]!=1)