Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ; Si (state=0) leer la combinación secreta y la guradaremos
- ; en el vector vSecret, sino estaremos leyendo una jugada y la
- ; guardaremos en el vector vPlay, son vectores de de DimVector(6) posiciones.
- ;
- ; · Primero indicar la posición del cursor en pantalla
- ; Si (state=0) (rowScreen=3), sino (rowScreen=9+(DimVector-tries)*2)
- ; (colScreen=8)
- ; · Inicializar con espacios el vector (vSecret) si (state=0), si no
- ; inicializar con espacios el vector (vPlay).
- ; Mientras no se pulse ENTER(10) o ESC(27) hacer lo siguiente:
- ; · Posicionar el cursor en pantalla llamando a la subrutina gotoxyP1,
- ; según el valor de las variables (rowScreen y colScreen).
- ; · Leer un carácter de teclado llamando la subrutina getchP1
- ; que deja en la variable (charac) el código ASCII del carácter leído.
- ; - Si se ha leído una 'j'(izquierda) o una 'k' (derecha) mover el
- ; cursor por las 6 posiciones de la combinación, actualizando
- ; el índice del vector (i +/-1) y la columna (colScreen +/-2).
- ; (no se puede salir de la zona donde estamos escribiendo (6 posiciones))
- ; - Si se ha leído un carácter válido ['0'-'9'] lo guardamos en el vector.
- ; Si (state=0) lo guardaremos en el vector (vSecret) y pondremos un '*'
- ; en (charac) para que no se vea la combinació secreta,
- ; sino lo guardamos en el vector (vPlay).
- ; Y mostramos el carácter (charac) en pantalla en la posición donde
- ; está el cursor llamando a la subrutina printchP1.
- ; · Si se ha pulsado ESC(27) poner (state=7) para indicar que tenemos
- ; que salir.
- ;
- ; Si se pulsa ENTER(10) aceptar la combinación tal y como esté.
- ; NOTA: Hay que tener en cuenta que si se pulsa ENTER sin haber asignado
- ; valores a todas las posiciones del vector, habrá posiciones que serán
- ; un espacio (valor utilizado para inicialitar los vectores).
- ;
- ; Variables globales utilizadas:
- ; rowScreen: fila de la pantalla donde posicionamos el cursor.
- ; colScreen: columna de la pantalla donde posicionamos el cursor.
- ; charac : carácter que leemos de teclado.
- ; vSecret : vector donde guardamos la combinación secreta
- ; state : estado del juego.
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- getSecretPlayP1:
- push rbp
- mov rbp, rsp
- push rax
- push rbx
- push rcx
- push rdx
- push r8
- mov ecx, [state]
- mov r8d, DimVector
- sub r8d, 1 ;almacenamos el limite superior del vector
- ;Inicializamos el cursor en pantalla
- mov DWORD [colScreen], 8
- cmp ecx, 0
- je combinacionSecreta
- ;state es distinto de 0, estamos con la jugada
- mov eax, DimVector
- sub eax, DWORD[tries]
- sal eax, 1
- add eax, 9
- mov DWORD [rowScreen], eax
- mov edx, vPlay ;usamos edx para trabajar con el vector
- ;inicializamos el vector vPlay a ' '
- jmp inicializarVector
- combinacionSecreta:
- ;state vale 0, estamos trabajando con la combinacion secreta
- mov DWORD [rowScreen], 3
- ;inicializamos el vector vSecret a ' '
- mov edx, vSecret ;usamos edx para trabajar con el vector
- inicializarVector:
- mov ebx, 0 ;usamos ebx como indice del vector
- bucleInicializarVector:
- cmp ebx, DimVector
- je endBucleInicializarVector
- mov BYTE [edx+ebx], ' '
- add ebx, 1
- jmp bucleInicializarVector
- endBucleInicializarVector:
- mov ebx, 0 ;usamos ebx como indice del vector
- secretDoWhile:
- call gotoxyP1 ;llamamos a la subrutina gotoxyP1
- call getchP1 ;obtenemos el caracter introducido
- mov al, BYTE [charac]
- cmp al, 27 ;la tecla pulsada es ESC
- je salirESC
- cmp al, 10 ;la tecla pulsada es ENTER
- je salirENTER
- cmp al, 'j' ;movemos el cursor a la izquierda
- je moverIzquierda
- cmp al, 'k' ;movemos el cursor a la derecha
- je moverDerecha
- cmp al, '0'
- jl secretDoWhile ;si el caracter es menor que 0, volvemos al principio del bucle
- cmp al, '9'
- jg secretDoWhile ;si el caracter es mayor que 9, volvemos al principio del bucle
- jmp introducirDigito
- moverIzquierda:
- cmp ebx, 0 ;si estamos en el limite izquierdo, volvemos al principio del bucle
- je secretDoWhile
- sub ebx, 1
- sub DWORD [colScreen], 2
- jmp secretDoWhile
- moverDerecha:
- cmp ebx, r8d ;si estamos en el limite derecho, volvemos al principio del bucle
- je secretDoWhile
- add ebx, 1
- add DWORD [colScreen], 2
- jmp secretDoWhile
- introducirDigito:
- mov BYTE [edx+ebx], al ;almacenamos el caracter en el vector
- cmp ecx, 0
- je mostrarAsterisco
- mov BYTE [charac], al
- jmp mostrarPantalla
- mostrarAsterisco:
- mov BYTE [charac], '*'
- mostrarPantalla:
- call printchP1
- jmp secretDoWhile
- endSecretDoWhile:
- salirESC:
- mov DWORD[state],7 ;salimos del programa
- salirENTER: ;salimos de la rutina
- pop r8
- pop rdx
- pop rcx
- pop rbx
- pop rax
- mov rsp, rbp
- pop rbp
- ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement