Antes de colocar el programa completo, vamos a analizar una sección del programa total. Esta sección es la que analiza la pulsación del ratón y define la coordenada.
A partir de este código añadiré una nueva función a la librería macro. Esta función será un getmousexy, pero en coordenadas de texto.
Efectivamente ahora tenemos un getmousex y un getmousey. Estas funciones son las tomadas del dos, y dan la posición de pantalla en pixel. Pero en una pantalla de texto, esto no tiene sentido. Además si trabajamos en texto el getmousex y el getmousey devuelven el mismo valor dentro de la matriz que forma un carácter.
Es por ello para mayor comodidad vamos a transformar en cordenadas de caracter lo mandado por getmousex y getmousey. Luego lo referenciaremos al inicio del tablero y daremos como inválido las coordenadas fuera de él.
Una vez conocida la coordenada correcta, la transformaremos en posición de bit, usando la instrucción rcr para situar ese bit en una palabra auxiliar que se sume a la de las demás jugadas.
La parte roja será la que convertiremos en una nueva función getmousexy.
;espera seleccion oponente
mouse on
espera:
getmouse ;comprueba el estado del raton
cmp ax,1
jnz actual ;si no se ha pulsado se espera
cmp ax,raton ;si se pulso se verifica si ha sido un
mov raton,ax ;flanco de subida
jnz seleccion ;si es asi se selecciona la opcion deseada
actual:
mov raton,ax
jmp espera
seleccion:
;toma la coordenada
getmousex
shr ax,4 ;divide por 16 para obtener coordenada letra
sub ax,5 ;referencia desde cero de la posicion en la matriz
cmp al,2 ;no valido si pulsamos fuera
ja espera
mov posx,al
getmousey
shr ax,4 ;divide por 16 para obtener coordenada letra
sub ax,2 ;referencia desde cero de la posicion en la matriz
cmp al,2 ;no valido si pulsamos fuera
ja espera
mov posy,al
;coloca el bit
mov al,posy ; posy*3+posx
add al,posy
add al,posy
add al,posx
cmp al,8 ; si pulsamos fuera no procesamos
ja espera
mov cl,al
xor al,al ; borra al
stc ; carry a 1
rcr al,cl ; situa el bit elegido
; comprueba que no esté seleccionada ya
mov ah,oponente
or ah,maquina
mov ocupados,ah
or ah,al ;montamos nuevo bit
cmp ah,ocupados ; ha añadido bit nuevo?
je espera ; si no añade bit nuevo la posición está ya estaba ocupada
or oponente,al ; guarda la jugada
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.