Blinky

 "el objetivo de un fantasma en el modo persecución es encontrar y capturar a Pac-Man cazándolo a través del laberinto. Cada fantasma exhibe un comportamiento único cuando persigue a Pac-Man, dándoles sus diferentes personalidades: Blinky (rojo) es muy agresivo y difícil de sacudir una vez que se pone detrás de ti, Pinky (rosa) tiende a ponerse frente a ti y cortarte el paso, Inky (azul claro) es el menos predecible del grupo, y Clyde (naranja) parece hacer lo suyo y mantenerse alejado."
El dossier de Pac-Man.
Por Jamey Pittman.
(En adelante cuando nos referimos al "dosier" o "expediente")

Una misma inteligencia (La semilla fantasmacon cuatro personalidades, como mucho inquietante.

TYPE

Hemos escrito en el script EVENT SPRITETYPE3 el comentario ; MODO MIEDO ASUSTADO. Esto es por que vamos a dedicar un "TYPE" para cada comportamiento de los fantasmas. A partir de ahora hablaremos de los siguientes "tipos" de fantasmas: "asustados", "perseguidores" alternativamente "desplegados" e "incorpóreos".

SPRITEINK

Cobra importante relevancia el color en este juego, además de la estética "minimalista" de la época. Rosa, rojo, azul claro y naranja. Son el índice de los fantasmas. "Si digo rojo, digo Blinky". Con el comando SPRITEINK coloreamos nuestros fantasmas.

Ciclo de vida del Fantasma.

Nacen en la "Guarida Fantasma", excepto Blinky que aparece fuera.
Salen. Persiguen y se despliegan alternativamente.
Si Pac-man come una "píldora energizante" cambian a modo asustado.
Si Pac-man come un fantasma, éste regresa a su Guarida en modo incorpóreo.
Dentro de la Guarida reaparece en modo persecución/despliegue.

El modo despliegue se alterna con la persecución unos segundos, de esta manera se aseguran de cubrir todo el tablero de juego, además de proteger las "píldoras energizantes".

Como ves, conforman una máquina diabólica, reaparecen en un ciclo infinito, son rápidos excepto cuando los asustamos, mortales y son cuatro. Nosotros somos su único objetivo.

OBJETIVO

Es la celda a la que apuntan los fantasmas. Es la propiedad que define su personalidad.
Blinky apunta directamente a la posición de Pac-man.

(Imágenes obtenidas del dosier fantasma).

Pinky se anticipa al movimiento de Pac-man varias celdas por delante de su posición y dirección o movimiento.


Inky pretende acorralarnos con mucha eficacia. Apunta interpolando la posición de Blinky y la posición dos celdas por delante del movimiento de Pac-man.


Clyde apunta Pac-man cuando está lejos y se aleja cuando está cerca, consiguiendo mantener una posición de asedio.

LA ECUACION

Falta el último elemento de la ecuación: Pac-man. Para que los fantasmas puedan hacer su trabajo necesitan la posición y dirección de Pac-man. Los fantasmas no son los únicos malvados de esta historia, se la vamos a revelar.

Abrimos el editor MPAGD. Abrimos el proyecto Pacman (esto lo repetiremos al inicio de cada capítulo). Incluimos las siguientes líneas al final de nuestro script EVENT PLAYER. Ahora ya sebes hacerlo.

LET V = X                ; Revela tu posición X
LET W = Y                ; Revela tu posición Y
LET I = DIRECTION        Revela tu dirección

Ahora podemos establecer nuestro "Objetivo" dentro del script EVENT SPRITETYPE4 apuntando de manera diferente según el color de nuestros fantasmas. Todo va cogiendo forma.

; objetivos

Si se tratase de Blinky:
    LET Q = V    ; COORDENADA X TRAJET
    LET R = W    ; COORDENADA Y TRAJET
    LET T = X    ; COMPAÑEROS POR AQUI ESTOY
    LET U = Y    ; LOCALIZADO

Si se trata de Pinky:
    LET Q = V    ; COORDENADA X TRAJET
    LET R = W    ; COORDENADA Y TRAJET

    ; cuatro celdas delante de Pac-man
    IF I = RIGHT
        ADD 32 TO Q
    ELSE
        IF I = LEFT
            SUBTRACT 32 TO Q
        ELSE
            IF I = UP
                SUBTRACT 32 TO R
            ELSE
                ADD 32 TO R
            ENDIF
        ENDIF
    ENDIF

Si es Inky:
    LET Q = V    ; COORDENADA X TRAJET
    LET R = W    ; COORDENADA Y TRAJET

    ; interpolar con Blinky
    IF I = RIGHT
        ADD 16 TO Q
    ELSE
        IF I = LEFT
            SUBTRACT 16 TO Q
        ELSE
            IF I = UP
                SUBTRACT 16 TO R
            ELSE
                ADD 16 TO R
            ENDIF
        ENDIF
    ENDIF

    MULTIPLY Q BY 2    ; INTERPOLAR CON BLINKY
    SUBTRACT T TO Q
    MULTIPLY R BY 2
    SUBTRACT U TO R

Si se trata de Clyde:
    LET Q = X
    IF X < V
        SUBTRACT X TO V        ; RESTA
        LET Q = V
        ADD X TO V            ; RESTAURA V
    ELSE
        SUBTRACT V TO Q        ; Q = DISTANCIA HORIZONTAL CON PACMAN
    ENDIF

    LET R = Y
    IF Y < W
        SUBTRACT Y TO W        ; RESTA
        LET R = W
        ADD Y to W            ; RESTAURA W
    ELSE
        SUBTRACT W TO R        ; R = DISTANCIA VERTICAL CON PACMAN
    ENDIF

    IF Q < 64    ; SI LA DISTANCIA ES MENOR QUE 4 CELDAS ENTONCES
        IF R < 64
            ; MODO DISPERSION
        ELSE
            LET Q = V
            LET R = W
        ENDIF
    ENDIF

BLINKY

La personalidad Blinky se encuentra dentro del script EVENT SPRITETYPE4. Las mentes del resto de los fantasmas perseguidores estarán allí también (TYPE = 4).

Selecciona la opción "Sprite type 4" del menú "Events". Lo editaremos para que quede así:

EVENT SPRITETYPE4

;Blinky

SPRITEINK 2

; Seleccion de objetivo. 

LET Q = V
LET R = W ; TARJET PARA MODO PERSIGUE

; movimiento

IF DIRECTION = UP
    ; gira a favor del reloj
    IF CANGOUP
        SPRITEUP
    ELSE
        LET DIRECTION = RIGHT
    ENDIF

    ; PERSIGUE EN UNA BIFURCACION
    IF X > Q
        IF CANGOLEFT
            LET DIRECTION = LEFT
            ANIMATE
        ENDIF
    ELSE
        IF CANGORIGHT
            LET DIRECTION = RIGHT
            ANIMATE
        ENDIF
    ENDIF
ENDIF

IF DIRECTION = DOWN
    ; gira en contra del reloj
    IF CANGODOWN
        SPRITEDOWN
    ELSE
        LET DIRECTION = LEFT
    ENDIF

    ; PERSIGUE EN UNA BIFURCACION
    IF X > Q
        IF CANGOLEFT
            LET DIRECTION = LEFT
            ANIMATE
        ENDIF
    ELSE
        IF CANGORIGHT
            LET DIRECTION = RIGHT
            ANIMATE
        ENDIF
    ENDIF
ENDIF

IF DIRECTION = LEFT
    ; gira a favor del reloj
    IF X <= LEFTEDGE
        LET X = RIGHTEDGE
        EXIT
    ELSE
    IF CANGOLEFT            
            SPRITELEFT
        ELSE
            LET DIRECTION = UP
        ENDIF
    ENDIF

    ; PERSIGUE
    IF Y > R
        IF CANGOUP
            LET DIRECTION = UP
            ANIMATE
        ENDIF
    ELSE
        IF CANGODOWN
            LET DIRECTION = DOWN
            ANIMATE
        ENDIF
    ENDIF
ENDIF

IF DIRECTION = RIGHT
    ; gira a favor del reloj
    IF X >= RIGHTEDGE
        LET X = LEFTEDGE
        EXIT
    ELSE
        IF CANGORIGHT
            SPRITERIGHT
        ELSE
            LET DIRECTION = DOWN
        ENDIF
    ENDIF

    ; PERSIGUE
    IF Y > R
        IF CANGOUP
            LET DIRECTION = UP
            ANIMATE
        ENDIF
    ELSE
        IF CANGODOWN
            LET DIRECTION = DOWN
            ANIMATE
        ENDIF
    ENDIF
ENDIF

Primero pintamos de rojo el fantasma, después escogemos el Objetivo y por último movemos al fantasma.
El movimiento tiene dos partes. La primera hace un giro en sentido de las agujas del reloj o en el sentido contrario cuando llega a un obstáculo en el laberinto. La segunda compara su posición con la posición del objetivo y decide en consecuencia.

Guarda es script, cierra el editor de texto y guarda el proyecto.
Queda menos.

Si aún no has colocado al final del script EVENT PLAYER las líneas siguientes, hazlo ahora.

LET V = X                ; Revela tu posicion X
LET W = Y                ; Revela tu posicion Y
LET I = DIRECTION        Revela tu direccion

(guarda el script, guarda el proyecto).

Por último. Selecciona la opción "Sprite positions" en el menú "Editor" y cambia el tipo de fantasma a dos de tus fantasmas a "Sprite type 4". Para eso usa el botón que está a la derecha. Cuando selecciones el fantasma cambia el tipo y el editor esperará que lo coloques en una posición, haz de nuevo clic en la posición que desees (puede que coloques sin querer dos fantasmas en un mismo lugar si no haces clics en este orden).

Guarda el proyecto.
Prueba. Pulsa F5 (si hay errores aparecen en la ventana de comandos).

"Intenta librarte de la sombra de Blinky".


Comentarios

Entradas populares de este blog

El laberinto