RYG: árbol de juego – generación del primer nivel

Programación retro del Commodore 64

  • Programación retro del Commodore 64
  • “Programación Retro del Commodore 64” es un blog sobre el hardware, el sistema operativo, y la programación del Commodore 64. Y más específicamente sobre programación en ensamblador. Pretende ser un blog con información de calidad, y referencia en español de la programación retro de esta maravillosa máquina.
    • Mi blog
« Publicado el: 16/05/2020 »

Ahora que ya tenemos la capacidad de generar los tableros hijo de un tablero dado, al menos cuando mueven los gatos (rutina “aplicaJugadaGatoHijo”), ya estamos en disposición de generar el primer nivel del árbol de juego. Para ello, lo que vamos a hacer es modificar el programa principal “RYG.asm” con un paso adicional:

Programa principal - primer nivel

Este nuevo paso es la instrucción “jsr arbolJugadasGatos”, y la nueva rutina “arbolJugadasGatos” hace esto:

Rutina arbolJugadasGatos

Es decir:

  • Copia el tablero actual a la raíz del árbol (“jsr copiaActualRaizArbol”).
  • Incrementa el puntero a la memoria libre en 85 bytes, porque la raíz del árbol ya pasa a estar ocupada por la copia del tablero actual.
  • Recorre los cuatro gatos y, para cada uno de ellos, llama a “arbolJugadasGato”.

Por su parte, la rutina “arbolJugadasGato” tiene dos partes. La primera es así:

Rutina arbolJugadasGato - parte1

Es decir:

  • Localiza el gato en el tablero.
  • Convierte su posición en formato offset a (fila, columna).
  • Y genera las jugadas válidas de ese gato.

Y la segunda parte es así:

Rutina arbolJugadasGato - parte2

Es decir:

  • Recorre las jugadas válidas del gato (0, 1 o 2 jugadas como mucho).
  • Y genera un tablero hijo al que se aplica esa jugada.

Al final, al llamar cuatro veces a “arbolJugadasGato”, una vez para cada gato, lo que deberíamos tener es el primer nivel del árbol de juego. Y como, además, según vamos generando los tableros hijos los imprimimos (sólo temporalmente y para depurar), el resultado es que el primer nivel del árbol debería verse por la pantalla.

Ensamblamos y ejecutamos en VICE. Se pinta el tablero inicial y, como humanos, se nos pide la jugada del ratón. Elegimos una cualquiera (ej. la 00), vemos que efectivamente se aplica y el ratón avanza, y, oh sorpresa, el programa se mete en un bucle infinito del que no sale. ¡¡Y encima desaparece un gato!!

Bucle infinito

¿Qué pensabais? ¿Que iba a funcionar bien a la primera? Ya empiezan los típicos problemas. A ver quién depura esto ahora…