Ya sabemos aplicar un movimiento con “makeMove” y deshacerlo con “takeBack”. Ahora vamos a probar estas rutinas, pero antes una rutina preparatoria que es necesaria.
Rutina “newPosition”:
La rutina “newPosition” es una nueva rutina del fichero “Init.asm”:

Esta rutina es parecida en su función a “InitBoard” pero, en vez de inicializar el tablero y la partida, inicializa el siguiente movimiento. Es decir, prepara todo para que se pueda decidir el siguiente movimiento:
- Mete cero en la puntuación del ratón (“mouse_score”).
- Mete cero en la puntuación de los gatos (“cats_score”).
- Obtiene el hash del tablero actual con “getHash” y lo guarda en “current_hash”.
- Obtiene el lock del tablero actual con “getLock” y lo guarda en “current_lock”.
Todavía no hemos llegado a la fase de elegir la mejor jugada. Para esto habrá que evaluar las hojas y aplicar minimax.
Todavía estamos en la fase previa de desarrollar el árbol de juego con “makeMove” y “takeBack”. Pero cuando llegue el momento de decidir la siguiente jugada, antes de hacerlo, habrá que llamar a “newPosition” para preparar el proceso de decisión, metiendo cero en las puntuaciones y actualizando hash y lock.
Nuevo programa principal:
Con el objeto de probar “makeMove” y “takeBack” hacemos un nuevo programa principal sencillo:

Este nuevo programa principal:
- Inicializa el tablero llamando a “initBoard”.
- Llamando a “randomize”, asigna valores aleatorios a las tablas que se utilizan para generar el hash y el lock. Nota: si en vez de llamar a “randomize” se llama a “fixedHash” se usan unos valores fijos para las tablas aleatorias, lo cual facilita la depuración por usar siempre los mismos valores, y así facilitar la repetición y la comparación.
- Inicializa el proceso de decisión de la siguiente jugada llamando a “newPosition”. De momento, no vamos hacer un proceso de decisión completo, sólo vamos a probar “makeMove” y “takeBack”, pero la llamada a “newPosition” sirve para calcular el hash y el lock del tablero actual (que es el tablero inicial).
- Imprime el tablero llamando a “displayBoard”.
- Hace un movimiento desde la casilla 4 hasta la casilla 13, es decir, mueve el ratón desde la casilla E1 = 4 hasta la casilla F2 = 13. Esto lo hace con “makeMove”.
- Vuelve a imprimir el tablero con “displayBoard”.
- Deshace el último movimiento, es decir, devuelve el ratón desde la casilla F2 hasta la casilla E1.
- Vuelve a imprimir el tablero con “displayBoard”. Obsérvese que, además del ratón, el hash y el lock, el bando, y el número de jugadas también vuelven a sus valores originales.
De este modo, el resultado es así:

Tras aplicar el movimiento E1F2, obsérvese que, además de cambiar la posición del ratón a F2, también cambian el bando que mueve (S: C), el número de jugadas (P:01 y H:01), el hash (#:42) y el lock (L:BE).
Contrariamente, tras deshacer el movimiento, obsérvese que, además de volver el ratón a la posición E1, también vuelven a sus valores originales el bando que mueve (S: M), el número de jugadas (P:00 y H:00), el hash (#:F3) y el lock (L:63).
Por tanto, parece que “makeMove” y “takeBack” funcionan bien. Así que el siguiente paso ya será evaluar los tableros.
Código del proyecto: RYG3-05