2017-03-07 7 views
0

Ich habe eine Mission von der Schule bekommen, um ein Schlangenspiel in der Montage zu bauen.
Ich habe das ganze Spiel gemacht, aber ich kann mir keinen Weg vorstellen, eine Sache zu machen - mache die Schlangenzählung in derselben Richtung, während keine Taste gedrückt wird.ASM: Prüfe, ob keine Taste gedrückt wird

Derzeit nach jedem Schritt, dieser Code meine Coderuf den nächsten Schlüssel zu erhalten:
mov ah,1h int 21h ; store at al
Aber diesen Code warten, bis der Benutzer etwas drücken, so dass er nicht gut ist für diesen Fall.
Kennt jemand einen Code, der nach einiger Zeit, wenn keine Taste gedrückt wird, den Code zählt?
Danke dazu :)

Antwort

1

starten:

mov ah, 0Bh ;CHECK IF ANY KEY WAS PRESSED. 
    int 21h  ;RESULT IN AL : ==0:NO KEY, !=0:KEY. 
    cmp al, 0 
    je JUMP_TO_MOVE_SNAKE 
;GET PRESSED KEY. 
    mov ah,1h 
    int 21h 
JUMP_TO_MOVE_SNAKE: 
    ... 

Dienst 0Bh nicht die Ausführung des Codes zu stoppen, so dass Sie wissen, wenn eine Taste gedrückt wird oder wenn es nicht ist.

+0

Vielen Dank! das funktioniert :) – Idan

+1

Das Schöne an 'INT 21/AH = 0Bh' gegenüber' INT 16/AH = 01' ist, dass die ersteren die STDIN, nicht die physikalische Tastatur, seit DOS2 + überprüfen. Upvoted. –

0

Lassen Sie den Interrupt eine Variable setzen. Verwenden Sie einen Timer, um es direkt nach dem Lesen zu löschen. Verwenden Sie die Variable zu bestimmen, welcher Code auszuführen: straight/links/rechts

+0

Hallo, aber ich habe deine Antwort nicht bekommen. Mein Problem war, dass das Programm gewartet hat, bis eine Taste gedrückt wird und wenn keine Taste gedrückt wird - das Programm wird nicht fortgesetzt. Ich habe bereits die Funktion, die du erwähnt hast, wenn du deine Antwort klarer findest? – Idan

Verwandte Themen