Hoy voy a colocar la rutina de como pensar la respuesta.
Como dije en la anterior entrada, esta es la rutina más importante, pues es la que analiza la jugada y toma la decisión correcta. Esta rutina es realmente el juego.
La he llamado ver_respuesta.
A esta rutinano se le pasan parámetros, pues la variable nivel_act, ya es la dirección en la que hay que buscar.
Esta rutina recorrerá la lista activa, desde el puntero indicado en nivel_act, e irá analizando si el oponente tiene la posición almacenada en la tabla. Si es así almacena la respuesta asociada mediante una "or" con la variable de máquina, para colocar la nueva jugada en el tablero.
Una vez almacenada la respuesta, verifica si hay puntero a un nuevo nivel, en cuyo caso almacena este nivelen la varible nivel_act, para que sea el nivel a buscar durante la siguiente llamada.
Si no es así es que el juego ha terminado. Analiza por lo tanto si está en el cuarto nivel, para determinar si es tablas y sale de la rutina indicando en estado el estado de la búsqueda.
En caso de haber recorrido la tabla y no haber encontrado el estado del oponente, devuelve en estado 0ffh como indicador de error.
RUTINA VER_RESPUESTA
(C) José Angel Moneo Fdez
ver_respuesta proc near
; busca la respuesta a la situación del oponente en la tabla correspondiente
; se pasa la dirección de la tabla en nivel_act
; devuelve estado=7 si gana, estado=6 si tablas y estado=4 si sigue el juego
; 0ffh= error
mov si,nivel_act
comprueba:
mov al,[si] ;posibilidad
cmp al,0 ;error fin de lista. No hay acción
jne n_error
mov estado,0ffh ; marca error
ret
n_error:
cmp oponente,al ;es la jugada hecha?
je encontrado
sig_estado:
add si,4 ; siguiente estado
jmp comprueba
encontrado:
mov al,[si+1]
or maquina,al ;añade al tablero de la máquina la jugada correspondiente
mov ax,[si+2] ;dato siguiente estado
cmp ax,0 ;fin de la partida
je _fin
cmp ax,1 ;tablas
je _fin
mov nivel_act,ax ;pasamos el puntero del nivel a la lista del siguiente nivel
xor al,al
jmp _fin_ver
_fin: or al,2 ; devuelve al=6 si gana y al=7 si tablas
_fin_ver:
or al,4 ;devuelve al=4 si sigue el juego
mov estado,al
ret
ver_respuesta endp
No hay comentarios:
Publicar un comentario
Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.