RYG: árbol de juego – generación del primer nivel #Programación retro del Commodore 64

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…

🙂


Código del proyecto: RYG07


Editar

Josepzin

No hay comentarios:

Publicar un comentario