RYG: jugadas del ratón – rutina básica #Programación retro del Commodore 64

El siguiente paso es generar las jugadas del ratón, es decir, empezar ya con el generador de jugadas.

Con el ratón va a jugar el humano, es decir, el usuario. Entonces, ¿por qué necesitamos generar sus jugadas? Pues porque en el árbol de juego habrá tableros que proceden de movimientos de los gatos y tableros que proceden de movimientos del ratón. Por tanto, el C64 no sólo tiene que saber mover los gatos; también tiene que saber cómo se mueve el ratón.

Para no mezclar el generador de jugadas con nada de lo anterior ("Tableros.asm", "PintaTableros.asm", "RYG.asm" y "Arbol.asm") estrenamos un nuevo fichero: "GenJugadas.asm".

La primera parte de este fichero contiene estas dos tablas para el ratón:

Movimientos ratón

La tabla "tblRatonF" nos da los cambios permitidos en la fila del ratón; la tabla "tblRatonC" nos da los cambios permitidos en la columna del ratón. Recorriendo ambas tablas con un índice común, combinando ambos cambios, y recordando que $ff es lo mismo que -1, los cambios permitidos son:

  • Índice 0 => (-1, -1).
  • Índice 1 => (-1, +1).
  • Índice 2 => (+1, +1).
  • Índice 3 => (+1, -1).

Es decir, si los pintamos gráficamente sobre un tablero:

RYG - movs ratón

No todos estos cuatro movimientos serán siempre válidos. En ocasiones, la casilla de destino estará ocupada por un gato o caerá fuera del tablero. Pero esto lo dejamos para un momento posterior. De momento sólo vamos a generar todas las posibilidades.

La segunda parte del fichero "GenJugadas.asm" tiene otro par de tablas ("tablaGatosF" y "tablaGatosC"), pero ahora dedicadas al movimiento de los gatos. Por tanto, no vamos a verlas de momento.

La última parte del fichero contiene la rutina "generaJugadaRaton", que genera una jugada para el ratón. Esta rutina recibe como parámetros de entrada:

  • Fila del ratón.
  • Columna del ratón.
  • Número de jugada, numeradas desde el 0 hasta el 3.

Y devuelve como parámetros de salida:

  • La nueva fila del ratón.
  • La nueva columna del ratón.

El campo "gjrTempX", como ya hemos comentado, no es más que un almacén temporal para el registro X, puesto que vamos a modificar su valor para acceder con él a la tabla de movimientos del ratón.

El código de la rutina "generaJugadaRaton" es así:

Rutina generaJugadaRaton

Es decir:

  • Guarda el valor del registro X.
  • Carga el número de jugada (0 … 3) en el registro X.
  • Usando el registro X (número de jugada) como índice, obtiene el cambio en la fila y lo suma a la fila actual del ratón. El resultado lo pone en la salida.
  • Usando el registro X (número de jugada) como índice, obtiene el cambio en la columna y lo suma a la columna actual del ratón. El resultado lo pone en la salida.
  • Recupera el valor original del registro X.

De este modo, variando el número de jugada desde el valor 0 hasta el valor 3 podemos generar todas las jugadas del ratón. Cuestión diferente es que sean válidas o no.


Código del proyecto: RYG02


Editar

Josepzin

No hay comentarios:

Publicar un comentario