|
Taller
|
| >> Taller >> Santa Attack by Wakroo >> Cap. 4, Parámetros. |
El objetivo del juego es "bombardear" las chimeneas con regalos. Por lo tanto, el comportamiento de este proceso es vital para el desarrollo del juego. En realidad, esta parte está hecha de una forma un poco chapucera, pero ya se sabe que las prisas son malas compañeras.
Lo primero sobre lo que quiero llamar la atención es sobre los bucles anidados que he usado. El regalo puede estar en 3 momentos distintos:
Puesto que el comportamiento es distinto en cada momento el código debe ser distitno. Por lo tanto, creé un bucle general con otros 3 bucles dentro, uno para cada momento. Cuando hacía falta rompía el LOOP y dejaba que fuera al siguiente. Al salir del último volvía al primero al estar todos en un gran círculo sin fin. Así era mucho más sencillo programar cada parte.
Nada más empezar el bucle principal se elige uno de los gráficos al azar. Como pasará por aquí en cada vuelta cambiará el gráfico después de haber hecho un ciclo completo. A continuación se entra en el momento de "carga del regalo". El gráfico sale poco a poco de la tobera hasta ponerse en su sitio. Para eso en cada vuelta se cogen las coordenadas y ángulo del padre, se mueve hacia atrás y se gira hasta ponerse en línea con la tobera. Luego se avanza según cuánto valga la variable privada aux y se aumenta aux en 2. Con esto se consigue que a cada FRAME el paquete esté un poco más fuera, por lo que da la sensación de que se está poniendo en posición. Finalmente, si aux=24 se rompe el bucle porque ya estará en su sitio.
Pasemos ahora al segundo momento. Éste simplemente coge las coordenadas y el ángulo del padre y mueve el gráfico hasta ponerlo en su sitio, al final del tubo de lanzamiento. Luego espera hasta que se pulse la tecla control, que es la que "disparará" el regalo.
Finalmente se ajusta el ángulo dentro del intervalo 0 - 359999 y viene el bucle que hace que el regalo caiga. Como no quería complicarme la vida lo hice muy sencillo. Se comprueba que el ángulo está entre 90000 y 270000 (mitad izquierda). En ese caso se aumenta el ángulo, lo que lo acerca a la vertical hacia abajo. Si no es así, se comprueba que que la diferencia entre el ángulo y 90000 es mayor que el giro que se le da. Si es así estará en la mitad derecha pero aún no habrá llegado a la vertical, por lo que se disminuye el ángulo (lo gira hacia el otro lado). Si ya está lo suficientemente cerca se le asigna 90000 y ya está.
Puede parecer que el regalo nunca cogerá la vertical si gira en el sentido contrario a las agujas del reloj, lo cuál puede ser cierto dependiendo del ángulo de lanzamiento. Pero como el ángulo de giro es pequeño y en un ciclo girará hacia un lado y en el siguiente al otro no se nota la diferencia. Reconozco que no me había dado cuenta de ese pequeño fallo hasta ahora, pero como lo hice por el método de prueba y error y funcionaba no me preocupé por comprobarlo... n_nU
Para terminar se comprueba la colisión con la chimenea. Se guarda el ID del proceso con el que se ha chocado en id2 y se usa para acceder a sus valores de x,y. Con esto se determina si ha impactado desde arriba y por el centro para contarlo como punto. Si no, se pone una pequeña animación de "explosión". Si no se ha chocado contra una chimenea se comprueba si se ha chocado contra una casa para poner la animación.
A lo mejor os estáis preguntando porqué he creado un bucle sin fin y he controlado el lanzamiento desde el proceso regalo y no desde santa. La razón es muy sencilla. Con el código del regalo de manera secuencial y haciendo una única llamada es imposible que haya dos regalos pululando por la pantalla a la vez. El regalo se pondrá en posición, esperará hasta que se lance, bajará, se pondrá en posición, esperará hasta que se lance, bajará,... Así para siempre jamás y sin necesidad de ninguna variable ni código que compruebe si hay algún regalo para volver a llamar al proceso, ya que es único.
Con esto ya hemos dejado atrás la parte más "complicada" del juego. Ahora pasemos a las casas y chimeneas.