PacMan para Pb1k

Un caluroso y aburrido día de verano de esos donde uno no tenía nada que hacer, me pregunté: ¿cómo hacen los fantasmitas de PacMan para perseguirlo? ¿y cómo es que todos lo persiguen de una manera diferente?

PacMan siempre fue para mi ese videojuego frustrante en el que todos los demás jugadores parecían puntuar más que yo, supuse que entender el propósito de cada fantasmita era la ruta lógica para poder ganar más puntos.

En todo caso, un buen día decidí hacer un clon de PacMan para la PB1000, ya había hecho otras cosas y consideré un buen reto intentarlo, lo que sigue a continuación es un poco reconstruir a partir de lo poco que recuerdo que hice hace un montón de años, ya que no tengo los fuentes del programa.

Nuevamente, la baja resolución de la pantalla de la calculadora no permitía condensar todo en 32 puntos (pixeles) verticales, debido a eso, decidí duplicar esa resolución echando mano de la pantalla virtual de la pb1k y llevar todo a 63 píxeles verticales, sin embargo, al desplazar la pantalla hacia abajo o hacia arriba se perdía visibilidad de lo que ocurría en la parte de la pantalla que no se veía, por lo cual, decidí crear un mapa para el campo de juego, este mapa estaría siempre visible.

En el mapa cada píxel correspondería a 1 caracter (Sprite) lo que significa que, 32 caracteres de ancho implicaban 32 pixeles de mapa, lo que correspondía a 8 caracteres de ancho para el mapa, al final, si quitaba esos 8 caracteres podía utilizar únicamente 24 caracteres para el campo de juego, algo así:

Eso sin embargo no era suficiente, iba a necesitar ampliar verticalmente de mayor manera el campo de juego.

Los bordes eran sencillos, básicamente eran unos cubos negros, con 1 sólo caracter (sprite) modificado era suficiente para dibujar todo el mapa, animar el pacman y los fantasmas también requerían pocos caracteres, 5 como mínimo, 6 en total.

Un detalle interesante era resolver el movimiento de los fantasmas, inicialmente utilicé lenguajes procedimentales de Basic para que se movieran, funcionaba pero era muy lento, demasiado, injugable, como con todo, dormí el problema varios días y finalmente llegué a una solución:

Utilizar funciones matemáticas para calcular las coordenadas de los fantasmas. Para la PB1k era mucho más rápido realizar un cálculo matemático que evaluar condicionales, so, I did.

Si la posición del Pacman se determinaba con variables (X,Y), siendo X la variable vertical (fila) y Y la variable horizontal (columna) las formulas serían:

Fantasma 1 (El horizontal). Decidí que este fantasma debía seguir la dirección horizontal del Pacman pero la vertical debía ser producto de una decisión aleatoria, a veces subiría y a veces bajaría.

XF1=XF1-1*SIGN(X-XF1)⁠1

YF1=YF1-1*TRUNC(RND(1)*2)⁠2

Fantasma 2 (El vertical). Decidí que este fantasma, debía comportarse de manera similar al horizontal salvo que en esta ocasión seguiría verticalmente al Pacman, la dirección horizontal sería aleatoria.

XF2=XF2-1*TRUNC(RND(1)*2)

YF2=YF2-1*SIGN(Y-YF2)

Fantasma 3 (El implacable). Este fantasma debía seguir de manera vertical y horizontal la misma dirección del pacman

XF3=XF3-1*SIGN(X-XF3)

YF3=YF3-1*SIGN(Y-YF3)

Fantasma 4 (El borracho). Este fantasma debía seguir direcciones verticales y horizontales de manera aleatoria.

XF4=XF4-1*TRUNC(RND(1)*2)

YF4=YF1-1*TRUNC(RND(1)*2)

La PB1k realiza estos cálculos suficientemente rápido como para dibujar el plano de juego y responder ante las solicitudes de los usuarios sin mayor problema.

anImage_12.tiff

1 Esta fórmula me permite calcular la dirección del pacman en relación con el fantasma 1, preguntando por el signo producto de la resta aritmética, así, al final se suma o se resta 1 unidad en relación a la posición actual del fantasma.

2 Con esta fórmula calcula un número aleatorio entre 0 y 1, se multiplica por 2, saca la parte entera y se lo suma a -1, de esa manera, los resultados posibles serían, -1 para 0 o 2 para 1.

Comments are closed.