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 fantasma) con 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
Publicar un comentario