Árbol de juego / actualización del tablero II

Nos acercamos ya a dos de las rutinas principales del juego, que son las rutinas:

  • Rutina “makeMove”: Esta rutina sirve para ejecutar un movimiento, ya sea con carácter definitivo (porque se ha seleccionado como el mejor) o con carácter provisional (porque se va a analizar en el proceso de desarrollo del árbol de juego o búsqueda).
  • Rutina “takeBack”: Esta rutina sirve para deshacer el último movimiento. Esto sólo tiene sentido durante el proceso de búsqueda, o si se ofrece una funcionalidad de rectificar el último movimiento.

Estas rutinas están al mismo nivel de importancia que otras ya vistas, por ejemplo, “gen” para generar las jugadas posibles, o “think” y “search” que veremos más adelante, y que sirven para desarrollar el árbol de juego hasta una profundidad N.

Rutina “makeMove”:

Como ya se ha adelantado, esta rutina sirve para ejecutar un movimiento. Está en el fichero “Update.asm”:

Esta rutina recibe un movimiento, es decir, una casilla de origen y una casilla de destino, y hace lo siguiente:

  • Guarda el movimiento (origen, destino) en la lista “game_list”. Esto es lo que va a permitir deshacer el movimiento más adelante, si fuera necesario.
  • Incrementa el número de jugadas históricamente jugadas desde el comienzo de la partida (“hply”) y el número de jugadas de la variante actual (“ply”).
  • Busca la pieza que está en la posición de origen, y la mueve a la posición de destino con “updatePiece”. Recordemos que “updatePiece” actualiza el tablero “board” y el hash / lock con “updateHash”.
  • Cambia el bando al que le toca mover (“side”).

Rutina “takeBack”:

Por su parte, la rutina “takeBack”, que también es del fichero “Update.asm”, es así:

Viene a hacer lo contrario que la rutina “makeMove”:

  • Vuelve a cambiar el bando al que le toca mover (“side”).
  • Decrementa el número de jugadas de la variante actual (“ply”) y las históricamente jugadas (“hply”) desde el inicio de la partida.
  • Busca en “game_list” el origen y el destino del último movimiento.
  • Usando “updatePiece”, mueve la pieza que hay en el destino desde el destino hasta el origen. Es decir, deshace el último movimiento.

Con estas dos rutinas, “makeMove” y “takeBack”, ya somos capaces de ejecutar y deshacer movimientos. Y es importante tener claro que hay dos situaciones en las que se ejecutan movimientos:

  • Durante el proceso de búsqueda o desarrollo del árbol de juego. En esta situación los movimientos se ejecutan para probar cómo de buenos o malos son. Estos movimientos hay que deshacerlos.
  • A partir del proceso de búsqueda anterior, y una vez que el C64 ha decidido cuál es la jugada que más le interesa, para ejecutar esa jugada con carácter definitivo.

Todo esto lo probaremos ya en la siguiente entrada.


Código del proyecto: RYG3-05

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s