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:
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:
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í:
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
No hay comentarios:
Publicar un comentario