Vistas de página en total

lunes, 5 de agosto de 2013

TIC_TAC_TOE (4/5)

  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.