Taller
>> Taller >> Santa Attack by Wakroo >> Cap. 2, Control del juego.

Todo el control del juego recae sobre el proceso juego(). Es él el encargado de llamar a todos los demás procesos necesarios. Esto es útil en juegos más complejos para, por ejemplo, pausar el juego (signal(TYPE juego,s_freeze_tree), que congela el proceso juego y todos sus descendientes). También hace posible arrancar el juego desde distintas partes del código y, si se usa algún parámetro, configurarlo con facilidad (en qué fase se quiere empezar, por ejemplo). En este caso todas esas opciones no se han usado porque no hacían falta, pero bueno, ahí están.

Primero se llama a los procesos santa(x,y,graph), luna(x,y,graph) y crea_casas(). Estos son todos los procesos necesarios para el juego y tienen sus propias secciones. También se escribe en la esquina superior izquierda el valor de la variable puntos.
NOTA: En versiones posteriores de Fenix no hace falta poner el & en la variable. Bastaría con poner write(0,10,10,0,puntos).

Después de esto tenemos un bucle LOOP. Lo primero que hay es una comprobación de la variable puntos. Si es mayor que la constante puntos_victoria entonces se ha ganado. Se pone un texto en pantalla y se espera 100 frames. Luego se sale del bucle. Si no se cumple esa condición se comprueba si velCasas es mayor que velCasas_victoria para ver si se ha perdido. Se pone un texto, se espera 100 frames y luego sale del bucle. El último IF comprueba si se ha pulsado el escape y, si es así, sale del bucle.

A continuación del bucle hay dos sentencias. La primera es let_me_alone(), que mata todos los procesos menos el que la ejecuta. La otra es exit("",0), que termina el programa. En principio la primera sentencia no debería ser necesaria, ya que se supone que el exit lo hará todo, pero bueno, por si acaso lo pongo.

Fijaos en un pequeño detalle. Dentro del bucle, cuando se dan las condiciones necesarias, no he puesto las sentencias para acabar el programa, sino que he roto el bucle y las he puesto a continuación. De esta manera se ahorran líneas de código. Imaginad que fueran 8 sentencias las que hay que hacer para terminar esta zona (porque hay que volver al menú o hacer lo que sea), por lo que tendríamos que poner las 8 sentencias en cada ocasión que queramos terminarlo, lo que hace un total de 24 sentencias... en contra de las 11 que se usan de esta forma (los 3 breaks y las 8 sentencias que están fuera). La otra gran ventaja es la facilidad para cambiarlo si en el futuro se nos ocurre algo mejor. Si se decide que en vez de salir hay que llamar otra vez al proceso juego() habría que modificarlo en cada sitio donde estuviera puesto, con el riesgo de olvidarse alguno. De esta manera con modificar uno bastaría.

Pasemos ahora a la nave protagonista del juego.