Esto es un juego

Estamos nerviosos delante de nuestro jefe de desarrollo. Está mirando nuestros diseños. Mira el laberinto y a Pacman. Después de un silencio dice: "perfecto, me gusta el color, va a destacar en la sala de juegos; pero ¿Qué hace Pacman?"

Tu le dices: "La premisa de Pac-Man es deliciosamente simple: con un joystick de cuatro vías, el jugador o jugadora guía a Pac-Man hacia arriba, hacia abajo, hacia la izquierda y hacia la derecha a través de un laberinto lleno de puntos para que los engulla".

Otro silencio. "¿Dónde puedo ver eso?"

SPRITE POSITIONS

No hay problema, se lo vamos a mostrar.

Abrimos nuestro MPAGD, cargamos nuestro proyecto  Pacman. Escogemos la opción "Sprite Positions" del menú "Editor".


En la imagen: a la derecha botón para cambiar tipo, abajo iconos para seleccionar Sprite.

Primer clic: Para AÑADIR a Pacman al "Laberinto" seleccionamos el icono correspondiente. Con cada "clic" estarás añadiendo un Sprite, ten cuidado

Segundo clic: EL botón derecho muestra el Sprite seleccionado y su tipo. Debes dejar seleccionado el tipo "PLAYER RESPAWN".

Tercer clic: En el Laberinto, en la "posición de salida", "GET READY!", que es la celda [14,11] (columna 14,fila 11).

Ya tenemos la Instancia, aparición, "spawn" o reaparición, "respawn" definida en el EngineZXCada vez que el Player MUERE en esta pantalla, REAPARECE en esta posición.

Ahora vamos a darle personalidad. Glotón compulsivo, rápido y decidido.

Guarda el trabajo.

EVENT PLAYER

Escogemos la opción "Player" del menú "Events".


En la imagen: editor de texto preferido con el script abierto.

Aquí leemos "EVENT PLAYER". Esta es una etiqueta para que nuestro EngineZX encuentre el script y lo ejecute.

Las cosas en el juego ocurren en un orden concreto y se repiten en un bucle infinito en lo que se conoce como "GAME LOOP".

"EVENT PLAYER" no es el primero de la lista de tareas del "GAME LOOP", hay cosas que ocurren antes y después. Esta arquitectura nos permite enfocar nuestra atención en departamentos concretos: ahora nos preocupa el control de Pacman.

A continuación escribimos nuestro código, todo 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

Esto es el control de nuestro jugador. "A primera vista no entiendo mucho lo que significa este código" dices. "No te preocupes, yo te comento línea por línea para que todos podamos comprender y recordar el significado cuando volvamos a leerlo" dice el programador del equipo. Esto es muy buena práctica.

Quedará así:

EVENT PLAYER
; Pacman

SPRITEINK 14

; Control
; Selecciona la dirección en que movemos a Pacman.

IF KEY UP                    ; si pulsamos la tecla "arriba"
    IF CANGOUP               ; y si puede ir hacia arriba
        DIRECTION = UP       ; entonces su dirección será "arriba" 
    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

; movemos a Pacman. Sección de movimiento

IF DIRECTION = UP            ; si su dirección es "arriba"
    IF CANGOUP               ; y si puede ir hacia arriba
        SPRITEUP             ; mueve arriba
        LET IMAGE = 2        ; tu imagen es "mirando al cielo"
ANIMATE              ; ejecuta un frame de animación
    ENDIF
ENDIF

IF DIRECTION = DOWN
    IF CANGODOWN
        SPRITEDOWN
LET IMAGE = 3
ANIMATE
    ENDIF
ENDIF

IF DIRECTION = LEFT           ; si su dirección es "izquierda" 
    IF X <= LEFTEDGE          ; y "X" supera el límite izquierdo de la pantalla "entra en el túnel del laberinto"
        LET X = RIGHTEDGE     ; entonces colócate en el límite derecho "sal del túnel por el otro lado"
        EXIT                  ; salir del script
    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

El programa deja que Pacman corra de manera compulsiva mientras no le indiquemos otra dirección o se encuentre con un obstáculo WALLBLOCK.

Guarda el código desde tu editor de texto. Cierra el editor de texto.
Guarda el proyecto.

Prueba. Selecciona "Build" desde el menú "File". Atiende a las indicaciones de la ventana de comandos anexa al editor. Aquí puedes adivinar dónde ocurre un error.

en la figura: el menu inicial del juego.

Selecciona con la tecla "1" el control con el teclado cuando aparezca este menú. Las teclas de control por defecto son "0","9","2","w". Lo puedes cambiar en la opción "Keyboard Controls" del menú "Editor".

Ya es un pequeño juego, conducir a un "come cocos" por el "Laberinto", lo habéis logrado. Sólo nos queda completar el requerimiento de alimentar a Pacman con sus cocos y hacer crecer el "SCORE". Pero hoy tenéis una cita con Halloween. El jefe puede esperar. En una semana habremos acabado.

Vamos a entender un poco más. Prueba este otro código:

EVENT PLAYER
; En otro juego

SPRITEINK  5

; Control
IF KEY UP
    IF CANGOUP
        DIRECTION = UP
SPRITEUP
LET IMAGE = 2
ANIMATE
    ENDIF
ENDIF
IF KEY DOWN
    IF CANGODOWN
SPRITEDOWN
LET IMAGE = 3
ANIMATE
        LET DIRECTION = DOWN
    ENDIF
ENDIF
IF KEY LEFT
    IF X <= LEFTEDGE
        LET X = RIGHTEDGE
        EXIT
    ELSE
        IF CANGOLEFT
    SPRITELEFT
    LET IMAGE = 1
            ANIMATE
    LET DIRECTION = LEFT
        ENDIF
    ENDIF
ENDIF
IF KEY RIGHT
    IF X >= RIGHTEDGE
        LET X = LEFTEDGE
        EXIT
    ELSE
        IF CANGORIGHT
    SPRITERIGHT
            LET IMAGE = 0
            ANIMATE
    LET DIRECTION = RIGHT
        ENDIF
    ENDIF
ENDIF

Guarda el código desde tu editor de texto. Cierra el editor de texto.

Prueba. Selecciona "Build" desde el menú "File". Atiende a las indicaciones de la ventana de comandos anexa al editor. Aquí puedes adivinar dónde ocurre un error. Un error muy común ocurre si dejas la última línea de tus scripts sin "end of line". Asegúrate de pulsar "enter" al final da esa última línea.

La diferencia es que ahora tienes que pulsar la tecla para mover el jugador. Esto es porque el script se ejecuta en orden estricto de arriba a abajo, resolviendo cada uno de las líneas.

Vuelve a colocar el código comentado de Pacman. Guarda el Script.
Guarda el proyecto.

Ahora es cuando nuestro programador presume de su trabajo y nos explica lo razonado, eficaz y ágil que es:

CANGORIGHT, CANGOLEFT, CANGODOWN y CANGOUP nos ayudan a detectar la colisión con los bloques del "laberinto" tipo "muro".

SPRITEINK colorea.

SPRITERIGHT, SPRITELEFT, SPRITEDOWN y SPRITEUP mueven el Sprite 2 pixeles en las direcciones respectivas.

ANIMATE ejecuta un frame de animación cada vez en un bucle infinito.

RIGHTEDGE y LEFTEDGE los establecimos cuando definimos las dimensiones de nuestra pantalla.

IMAGE es el índice que apunta a los gráficos (Sprites) que hemos editado y guardado en memoria. cuando cambiamos de dirección, cambiamos el gráfico Sprite.

UP, DOWN, LEFT y RIGHT son constantes en el juego.

Por último decir que IMAGE, Y, X y DIRECTION son propiedad de Pacman. Cada Sprite en juego tendrá su posición, su imagen, dirección y otras propiedades que veremos más adelante.

Tenemos trabajo y juego por delante. Esto es un juego.

"La premisa de Pac-Man es deliciosamente simple: con un joystick de cuatro vías, el jugador guía a Pac-Man hacia arriba, hacia abajo, hacia la izquierda y hacia la derecha a través de un laberinto lleno de puntos para que los engulla. Cuatro monstruos fantasmas también están en el laberinto y persiguen a nuestro héroe, tratando de capturarlo y matarlo".

El dosier fantasma

Paku paku


Comentarios

Entradas populares de este blog

El laberinto