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:
Este nuevo paso es la instrucción "jsr arbolJugadasGatos", y la nueva rutina "arbolJugadasGatos" hace esto:
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í:
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í:
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!!
¿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
No hay comentarios:
Publicar un comentario