Paku paku

"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

Entradas populares de este blog

El laberinto