RYG: función de evaluación – pintado del árbol #Programación retro del Commodore 64

Ya tenemos una función de evaluación (rutina "evaluaTablero") y una rutina que evalúa recursivamente todos los tableros del árbol (rutina "evaluaArbol").

Todo esto hay que probarlo, y la mejor manera de probarlo es pintando el árbol de juego con sus evaluaciones, y comprobando que éstas efectivamente responden a los criterios definidos.

Para ello vamos a desarrollar una nueva rutina, llamada "pintaArbol", que se encargará de pintar el árbol de juego completo. Esta rutina nuevamente será recursiva (se llamará a sí misma), y estará definida en el fichero "pintaTableros.asm". La llamaremos justo después de construir y evaluar el árbol:

Rutina pintaArbolJugadas - llamada

Rutina pintaArbol - llamada

Hasta ahora teníamos una rutina para pintar tableros ("pintaTablero"), pero no una rutina para pintar el árbol completo ("pintaArbol"). Además, la rutina para pintar tableros la llamábamos sobre la marcha, según se iban generando los tableros (rutinas "aplicaJugadaGatoHijo" y "aplicaJugadaRatonHijo"), lo que tenía como efectos secundarios:

  • No se podían pintar las direcciones de los hijos, porque recién creado un tablero sus hijos todavía no están creados.
  • No se podía pintar la evaluación del tablero, porque primero creamos el árbol completo (sus tableros) y luego lo evaluamos también completo.

En realidad, hasta ahora veníamos llamando a la rutina "pintaTablero" desde "aplicaJugadaGatoHijo" y desde "aplicaJugadaRatonHijo" más como una forma de depurar que los tableros o jugadas se generan bien, que por el interés que tuviera pintar esos tableros.

Sea como fuere, hay que cambiar el enfoque, porque ahora queremos pintar las evaluaciones, lo que nos lleva a:

  • Dejar de llamar a "pintaTablero" desde "aplicaJugadaGatoHijo" y "aplicaJugadaRatonHijo". En vez de esto pintamos un punto ("."), lo que pretende transmitir la idea de que el C64 está pensando. Y en realidad lo está haciendo, porque está generando tableros.
  • Empezar a llamar a "pintaArbol" tras construir y evaluar el árbol completo, lo que nos permitirá visualizar las evaluaciones y, ya de paso, también las direcciones de los hijos.

Finalmente, aprovechamos para hacer un pequeño cambio estético, y en vez de pintar los turnos con $01 (ratón) y $ff (gatos), definimos la rutina "pintaTurno", que pinta los literales "RATON" y "GATOS" respectivamente.

La rutina "pintaArbol" tiene una estructura muy similar a las otras rutinas recursivas que ya hemos visto ("evaluaArbol" y "desarrollaUnNivel"):

  • Primero evalúa si se ha terminado de pintar el árbol.
  • Si no se ha terminado, pinta la raíz del árbol con "pintaTablero".
  • Y luego recorre los hijos pintándolos también llamándose de forma recursiva.

En esta primera parte evalúa si se ha terminado o continuar:

Rutina pintaArbol - parte1

En esta segunda parte pinta la raíz del árbol actual. Para ello usa "pintaTablero":

Rutina pintaArbol - parte2

Y, por último, en la tercera parte recorre los hijos y los pinta recursivamente:

Rutina pintaArbol - parte3

Lo importante es el resultado final. Y si ahora ejecutamos el juego con un nivel de profundidad dos, primero aparece "PENSANDO: …………………………….." mientras se genera el árbol de juego:

Pensando

Y luego, tras generarlo, se pinta el árbol completo (lo que sigue es la pantalla final tras todo el scroll vertical):

Rutina pintaArbol - resultado

En esta imagen se puede observar que:

  • En el turno ya aparece "RATON" o "GATOS" y no $01 o $ff.
  • Ya aparece la evaluación del tablero, que en el caso anterior es de $7e.
  • Ya aparecen las direcciones de los hijos, salvo que el tablero en cuestión sea una hoja del árbol (como el de la imagen anterior), en cuyo caso no tiene hijos y aparecen todos inicializados a $0000.

Lo importante ahora es validar si $7e es la evaluación correcta del tablero conforme a los criterios definidos:

  • Fila del ratón => +0 puntos.
  • Movimientos del ratón => -2 puntos.
  • Evaluación de partida (punto neutro) => $80.

Total = $80 – $02 = $7e. Por tanto, la evaluación es correcta. Y esto mismo se puede comprobar para todos los tableros del árbol generado y pintado.

Y puesto que parece que ya conseguimos evaluar bien, el siguiente paso será el procedimiento minimax.


Código del proyecto: RYG12


Editar

Josepzin

No hay comentarios:

Publicar un comentario