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

Ahora que ya tenemos la función de evaluación, vamos a aplicarla.

Lo suyo sería aplicarla sólo sobre las hojas del árbol, y hacer subir las valoraciones mediante el procedimiento minimax. Sin embargo, de momento, vamos a evaluar todos y cada uno de los tableros del árbol. Así podemos comprobar si la rutina funciona bien con un montón de tableros y, de paso, vamos preparando el procedimiento minimax.

Por otro lado, ya comentamos que la evaluación puede hacerse sobre la marcha, según se van generando los tableros, o ya al final, con todo el árbol de juego generado. Y como no pensamos aplicar un procedimiento de poda, vamos a hacerlo al final. Así es más claro.

Rutina "evaluaArbol":

Para conseguir lo anterior dotamos una nueva rutina "evaluaArbol" en el fichero "EvalTableros.asm". Esta rutina es recursiva, igual que la que generaba el árbol de juego completo. Recibe un tablero (con sus hijos enlazados) y una profundidad, y hace lo siguiente:

  • Si la profundidad ya es menor que cero, termina.
  • Si la profundidad es cero o mayor:
    • Evalúa el tablero actual.
    • Recorre los tableros hijo y, de forma recursiva, los evalúa (reduciendo previamente la profundidad en uno).

De este modo se consigue evaluar de forma recursiva todo el árbol. Cuando la evaluación llega a las hojas del árbol termina, porque ya no hay más hijos que evaluar.

Esta es la primera parte de "evaluaArbol", donde se decide si seguir evaluando o terminar ya (profundidad = $ff = -1):

Rutina evaluaArbol - parte1

Esta es la segunda parte de la rutina, donde se evalúa el tablero actual con la rutina ya conocida "evaluaTablero":

Rutina evaluaArbol - parte2

Y en la tercera parte se recorren los hijos del tablero actual ("jsr dameHijo"), se decrementa la profundidad en uno ("sbc #$01"), y se continúa recursivamente con todos los hijos ("jsr evaluaArbol"):

Rutina evaluaArbol - parte3

Llamada a la rutina "evaluaArbol":

La rutina "evaluaArbol", como toda rutina, hay que llamarla para que en la práctica haga algo. Y ya hemos dicho que vamos a llamarla tras generar el árbol completo, es decir, aquí:

Rutina evaluaArbol - llamada

La llamada a "evaluaArbolJugadas" se produce justo después de generar el árbol de juego ("jsr desarrollaArbolJugadas"). Y "evaluaArbolJugadas" es básicamente una simple llamada a la recién presentada "evaluaArbol":

Rutina evaluaArbolJugadas

Puede que llame la atención también la llamada "jsr pintaArbolJugadas", pero su propósito lo comentaremos ya en la entrada siguiente.


Código del proyecto: RYG12


Editar

Josepzin

No hay comentarios:

Publicar un comentario