"Los
japoneses tienen una jerga, paku paku, que usan para describir el movimiento de
la boca abriéndose y cerrándose mientras se come. El nombre Puck-Man vino de
esa palabra ".
- Toru Iwatani
EVENT COLLECT BLOCK
EngineZX tiene previstos muchos mecanismos de los video-juegos, este es uno muy conocido. Para cumplir el requerimiento "paku paku" escribiremos un script que se ejecuta cada vez que Pacman colisiona con un "punto luminoso".
Cuando PLAYER colisiona con un COLLECTABLE BOLOCK, entonces "Event collect block" entra en juego.
Abre tu editor MPAGD. Abre el proyecto. Selecciona la última opción "Collect Block" del menú "Events". Deja escrito esto así:
EVENT COLLECTBLOCK
; COME
SCORE 5 ; suma 5 al marcador
ADD 1 TO N ; suma 1 al contador de cocos
;BEEP 1 ; FX Sonido "EAT"
AT 22 2
SHOWSCORE ; pinta el marcador
Muy bien. Guarda el script, cierra el editor de texto y guarda el proyecto.
GETBLOCKS
Falta llamar al comando GETBLOCKS que se encarga de lanzar el evento "EVENT COLLECTBLOCK" cuando corresponda. Este comando lo ejecutamos en EVENT PLAYER.
Selecciona "Player" del menú "Events" en el editor.
Revisa el código y coloca al final el comando GETBLOCKS
Debe quedar así:
EVENT PLAYER
; Pacman
SPRITEINK 14
; Control
IF KEY UP
IF CANGOUP
DIRECTION = UP
ENDIF
ENDIF
IF KEY DOWN
IF CANGODOWN
DIRECTION = DOWN
ENDIF
ENDIF
IF KEY LEFT
IF CANGOLEFT
DIRECTION = LEFT
ENDIF
ENDIF
IF KEY RIGHT
IF CANGORIGHT
DIRECTION = RIGHT
ENDIF
ENDIF
IF DIRECTION = UP
IF CANGOUP
SPRITEUP
LET IMAGE = 2
ANIMATE
ENDIF
ENDIF
IF DIRECTION = DOWN
IF CANGODOWN
SPRITEDOWN
LET IMAGE = 3
ANIMATE
ENDIF
ENDIF
IF DIRECTION = LEFT
IF X <= LEFTEDGE
LET X = RIGHTEDGE
EXIT
ELSE
IF CANGOLEFT
SPRITELEFT
LET IMAGE = 1
ANIMATE
ENDIF
ENDIF
ENDIF
IF DIRECTION = RIGHT
IF X >= RIGHTEDGE
LET X = LEFTEDGE
EXIT
ELSE
IF CANGORIGHT
SPRITERIGHT
LET IMAGE = 0
ANIMATE
ENDIF
ENDIF
ENDIF
GETBLOCKS ; COME COCOS
Muy bien. Guarda el script, cierra el editor de texto y guarda el proyecto.
Puedes probar ahora. "Build" es una opción del menú "File" del MPAGD, puedes pulsar F5 también. Vigila la ventana de comandos por si hubiera algún error.
Pues ya lo tenemos. Los jugadores o jugadoras se ven motivados por conseguir un buen marcador o poseer el RECORD. Se ven amenazados cuando hay una cuenta atrás en el tiempo, o se estresan cuando pierden vidas. Estos conceptos básicos mueven los juegos hoy en día también.
VARIABLES
Acaba de entrar en juego la variable N. El objetivo de Pacman es comerse todos los puntos de luz. La forma de saber si consigue su propósito es contarlos.
N es una variable "Global". Será pública para todos los participantes del juego si quieren verla. La declaramos en el inicio del juego.
DIRECTION, X e Y son Propiedades del Sprite. Estas son privadas.
EVENT GAMEINIT
Declaremos aquí nuestras variables. Este evento es uno de los primeros eventos en ocurrir antes del "GAME LOOP".
El Script quedaría así:
EVENT GAMEINIT
; VARIABLES GLOBALES
LET LIVES = 3
LET N = 0 ; CONTADOR PILDORAS
; MARCADORES
AT 22 16
DISPLAY LIVES
AT 22 2
SHOWSCORE
AT 22 24
SHOWHIGH
TEST
Cuando tengamos dudas sobre nuestro script, una manera sencilla de hacer comprobaciones es colocar en sitios estratégicos una etiqueta, un número o un sonido que se pintan durante el curso del juego.
Vamos a contar cuantas "píldoras", "puntos luminosos", "cocos" tenemos en el laberinto.
Para eso inserta al principio del EVENT PLAYER lo siguiente:
EVENT PLAYER
; Pacman
AT 0 15 DISPLAY N
...
Prueba a comerte todos los puntos. ¿Cuántos son? 193. Apúntalo que será el valor que nos indicará si se ha conseguido el "ENDGAME".
ENDGAME
Por último colocamos este código al final del script de nuestro EVENT PLAYER:
...
IF N = 193
LET N = 0
ENDGAME
ENDIF
Esto va a comprobar si se comen todos los "cocos". Cuando esto ocurra se acaba el juego.
El HIGH SCORE es logro de los Arcade de la época. Si Arcade fuese una función que pudiéramos llamar, nos devolvería un SCORE.
Esto es precisamente lo que hace el EngineZX. Pero esto lo veremos en el siguiente episodio: GAME LOOP.
Acuérdate de guardar tu trabajo.
"El objetivo es limpiar el laberinto de puntos y
evitar los fantasmas mortales. Cada ronda comienza con los fantasmas en la "Guarida del monstruo" en el centro del laberinto, saliendo de él para
unirse a la persecución.
Si Pac-Man es capturado por un fantasma, se
pierde una vida, los fantasmas regresan a su "guarida" y se coloca un nuevo
Pac-Man en la posición inicial antes de que el juego continúe. Cuando se
despeja el laberinto de todos los puntos, se reinicia el tablero y comienza una
nueva ronda. Si Pac-Man es atrapado por un fantasma cuando no tiene vidas
extra, el juego termina".
No perdamos de vista nuestro objetivo.
Comentarios
Publicar un comentario