Ritmo

"Si un muro bloquea la dirección elegida, el fantasma intenta las direcciones restantes en este orden: arriba, izquierda, abajo y derecha, hasta encontrar una dirección aceptable lo que produce resultados predecibles que el jugador acaba aprendiendo".

Dosier fantasma.

Los Niveles

En los juegos tipo Arcade, la sencillez del juego necesita obstáculos y retos suficientes para que el jugador no pierda su atención.
Algunos mecanismos comunes consisten en cambiar las condiciones del juego de manera progresiva creando niveles de dificultad. Puedes cambiar la velocidad de los fantasmas, el tiempo que dura la persecución. Puedes premiar al jugador con bonificaciones, puntos extra, vidas extra, para motivarlo positivamente. Por último está el High Score y el llegar al último nivel. Eso hará que se pasen un buen rato jugando.

En la micro-sesión "Ciclos por segundo" en el apartado "gestor de modos" se introduce la variable P que representa los niveles terminados o pantallas que vamos acumulando. A medida que aumenta el nivel los fantasmas gastan menos tiempo en la dispersión y más en la persecución hasta que a partir del nivel 20 dejan de desplegarse definitivamente. Es un ejemplo de hacer el juego "Más difícil".

Velocidad

"Cuando están asustados, los fantasmas se mueven a una velocidad mucho más lenta de lo normal y, para los niveles uno a cuatro, Pac-Man también acelera. El juego comienza con Pac-Man al 80% de su velocidad máxima. Por el quinto nivel, Pac-Man se está moviendo a toda velocidad y continuará haciéndolo hasta el nivel 21. En ese punto, reduce la velocidad al 90% y mantiene esta velocidad durante el resto del juego".

Dosier fantasma.


Vamos a sintetizar al máximo el mecanismo de la velocidad. Estableciendo pocas reglas básicas seremos fieles al "Dosier fantasma".
Blinky es el más rápido, incluso más que Pac-man. Los fantasmas reducen la velocidad cuando están asustados. Cuando subimos de nivel todo va más rápido. El nivel 20 es el más difícil, después no hay cambios (nosotros usaremos el 16).

Según estas reglas obtenemos este patrón de velocidades:

Velocidad "Lenta", los más lentos, los fantasmas asustados. Velocidad "Normal", Pac-man y sus perseguidores (Ghosts) PINKY, INKY Y CLYDE.
La velocidad mas "Rápida" será siempre para Blinky.
Aquí está distribución según niveles del juego.

VELOCIDAD    niveles 1 al 8    niveles 8 al 16    niveles 16+
    1+          Asustados
    2+        Pac-man Ghosts       Asustados
    3+            Blinky        Pac-man Ghosts      Asustados
    4+                              Blinky       Pac-man Ghosts
    5+                                              Blinky

Para el juego hemos diseñado 6 velocidades. En realidad son 5 maneras de ralentizar el movimiento y crear la ilusión de diferencia de velocidad. EngineZX no se encarga gestionar la velocidad de los Sprites. La velocidad máxima de movimiento (6+) es justamente la del EngineZX (100%). La correspondencia es la siguiente:

EngineZX 100%(6+), 99%(5+), 83%(4+), 66%(3+), 50%(2+), 33%(1+).


Pongamos en práctica nuestra estrategia.

EVENT MAINLOOP1


Abre el editor MPAGD. Abre el proyecto Pacman. Selecciona la opción "Main loop 1" del menú "Events". Añade estas líneas al final del script.

; Contador de frames del juego
ADD 1 TO Z
IF Z > 5
LET Z = 0 ; pulso (tic) 0, 1, 2, 3, 4, 5
ENDIF

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

El contador Z recorre los números 0 al 5 cada ciclo del "game loop" y lo repite infinitamente. Marcará el ritmo 6x6.

RITMO

Para conseguirlo saldremos del Script correspondiente con el comando EXIT justo antes de la sección de código que lo mueve, solo cuando el valor Z cumple el patrón rítmico de movimiento y tendremos cuidado de hacerlo antes de ejecutar código sensible.

La VELOCIDAD 1+ "deja mover" (representamos con un "1") el Sprite una vez cada 6 ciclos y "frena" (representamos un "0") el resto de frames. Gráficamente la velocidad 1+ la podemos representar así "100000" (patrón de movimiento).

Aquí tienes los patrones de movimiento para las velocidades que vamos a usar en nuestro juego. Patrones rítmicos:

; VELOCIDAD 1+ 100000
    IF Z = 0
    ELSE
        EXIT        ; si Z <> 0 entonces salir
    ENDIF

; VELOCIDAD 2+ 100100
    IF Z = 0
    ELSE
        IF Z = 3
        ELSE
            EXIT    ; si Z <> 0 y Z <> 3 entonces Salir (sin mover).
        ENDIF
    ENDIF

; VELOCIDAD 3+ 010101
    IF Z = 0
        EXIT        ; si Z = 0 entonces salir
    ENDIF
    IF Z = 2
        EXIT        ; si Z = 0 entonces salir
    ENDIF
    IF Z = 4
        EXIT        ; si Z = 0 entonces salir
    ENDIF

; VELOCIDAD 4+ 110110
    IF Z = 2
        EXIT        ; si Z = 2 entonces salir
    ENDIF
    IF Z = 5
        EXIT        ; si Z = 5 entonces salir
    ENDIF

; VELOCIDAD 5+ 111110
    IF Z = 5
        EXIT        ; si Z = 5 entonces salir
    ENDIF

; VELOCIDAD 6+ 111111
    ; Es justamente la del EngineZX. No usa comando EXIT

Despreciamos la velocidades 1+ y 2+ por ser excesivamente lenta para nuestro juego.
Tenemos los patrones de ritmo y la tabla de velocidades, ahora añadiremos el código en su momento (o lugar) correspondiente.

EVENT PLAYER


Pongamos a funcionar todo. Para eso introducimos una nueva variable L, que representa el nivel de dificultad del juego.

Selecciona ahora la opción "Player" del menú "Events". Busca estas líneas en el script:

; comprobaciones

IF N = 193
    LET N = 0
    ENDGAME
ENDIF

Este es el momento en que Pac-man termina el tablero de juego, se come todos los puntos de luz (193). Es cuando vamos a gestionar el recuento de pantallas y modificamos las condiciones del nuevo nivel. Modificamos para que quede así:

; comprobaciones

IF N = 193     ; tablero terminado?
    ADD 1 TO P        ; sumamos una pantalla terminada más
    IF P = 8
LET L = 2        ; subimos de nivel dificultad del juego
ADD 1 TO LIVES   ; te damos vida extra!
; BEEP           ; efecto sonido "VIDA EXTRA"
    ELSE
IF P = 16
            LET L = 3        ; subimos al máximo nivel
    ADD 1 TO LIVES   ; te damos última vida extra
    ; BEEP "VIDA EXTRA"
ENDIF
    ENDIF
    LET N = 0
    RESTART          ; comenzamos de nuevo con nuevas reglas
ENDIF

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

Fíjate que el juego ahora no termina hasta que agotes las vidas. El comando RESTART vuelve a recolocar todo en su sitio. La única forma de que el juego termine es cuando la variable LIVES es igual a 0.
El programa establece unas pequeñas reglas, sube de nivel la velocidad a partir de la pantalla 8 y 16, en esas mismas pantallas le damos al jugador una vida extra, restablece el contador de puntos de luz y comienza todo de comenzamos de nuevo con nuevas reglas.

EVENT GAMEINIT


Selecciona ahora la opción "Game initialisation" del menú "Events". Incorporamos las nuevas variables con sus valores iniciales. Debe añadir estas tres al script:

LET Z = 0 ; Ritmo
LET P = 1 ; PANTALLAS
LET L = 1 ; niveles de dificultad

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

EVENT PLAYER


Aplicamos la velocidad al movimiento de Pac-man, añadimos dificultad al juego.

Selecciona de nuevo la opción "Player" del menú "Events". Colocamos el código justo a continuación de SPRITEINK 14, al principio del script.

; velocidades
IF L = 1
    ; VELOCIDAD 4+ 110110
    IF Z = 2
EXIT
    ENDIF
    IF Z = 5
     EXIT
    ENDIF
ENDIF
IF L = 2
    ; VELOCIDAD 5+ 111110
    IF Z = 5
        EXIT
    ENDIF
ENDIF

Para el nivel 3 (máximo nivel) Pac-man se moverá a la velocidad del EngineZX, no hace falta escribir el código.

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

Intenta terminar los puntos de luz del laberinto. Pulsa "F5" o selecciona "Build" en el menú "File" del MPAGD. Comprueba siempre la ventana de comandos por si hay algún error.
Suerte con los fantasmas, ahora son más rápidos (o tu más lento que diría Albert).

EVENT SPRITETYPE4


Seamos justos, equilibremos la balanza con la velocidad de los fantasmas.

Selecciona la opción "Sprite type 4" del menú "Events". Colocamos el código justo antes de la sección de movimiento.

; velocidades
IF SETTINGA = 2
    ; Blinky es el más rápido
    IF L = 1
        ; VELOCIDAD 5+ 111110
        IF Z = 5
            EXIT
        ENDIF
    ENDIF
ELSE
    ; PINKY, INKY Y CLYDE
    IF L = 1
        ; VELOCIDAD 4+ 110110
        IF Z = 2
    EXIT
        ENDIF
        IF Z = 5
         EXIT
        ENDIF
    ENDIF
    IF L >= 2
        ; VELOCIDAD 5+ 111110
        IF Z = 5
            EXIT
        ENDIF
    ENDIF
ENDIF

EVENT SPRITETYPE3


Quedan los fantasmas asustados por modificar. Selecciona la opción "Sprite type 3" del menú "Events". Colocamos el código justo antes de la sección de movimiento.

; velocidades
IF L = 1
    ; VELOCIDAD 3+ 010101
    IF Z = 0
        EXIT
    ENDIF
    IF Z = 2
        EXIT
    ENDIF
    IF Z = 4
        EXIT
    ENDIF
ENDIF
IF L >= 2
    ; VELOCIDAD 4+ 110110
    IF Z = 2
EXIT
    ENDIF
    IF Z = 5
     EXIT
    ENDIF
ENDIF

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

Intenta terminar los puntos de luz del laberinto. Pulsa "F5" o selecciona "Build" en el menú "File" del MPAGD. Comprueba siempre la ventana de comandos por si hay algún error.

La suerte de los fantasmas ha cambiado. Blinky siempre será el más rápido, a los demás los podrás alcanzar con la ayuda de Kokoro. Se lo hemos puesto difícil a Pac-man habrá que motivarlo con alguna recompensa.


Comentarios

Entradas populares de este blog

El laberinto