2017-01-27 19 views
1

Я пытаюсь сделать игру Snake в TASM, но у меня есть проблема; Я не могу понять, как заставить Снейка двигаться, ожидая нажатия клавиши, потому что ah = 0 и int 16h останавливает Змею и ждет нажатия клавиши. Может кто-нибудь, пожалуйста, помогите мне с этим?сборка событий в режиме реального времени x86 TASM

+2

Почему вы программируете игру DOS в 2017 году? – zwol

+0

Вы можете использовать опрос в цикле или обработчик прерываний. – Jester

+0

@zwol School ... – user6181605

ответ

2

Вы можете использовать int 21h, ah=0BH, чтобы проверить, если клавиша была нажата, без остановки программы, например:

game: 
;CHECK IF KEY WAS PRESSED. 
    mov ah, 0bh 
    int 21h  ;◄■■ RETURNS AL=0 : NO KEY PRESSED, AL!=0 : KEY PRESSED. 
    cmp al, 0 
    je move_snake 
;PROCESS KEY.   
    mov ah, 0 
    int 16h  ;◄■■ GET THE KEY. 
move_snake: 

    jmp game 

Полный пример (не змея, конечно):

.model small 
.stack 100h 
.data 
.code 
    mov ax, @data 
    mov ds, ax 
game: 
;CHECK IF KEY WAS PRESSED. 
    mov ah, 0bh 
    int 21h 
    cmp al, 0 
    je move_snake 
;PROCESS KEY.   
    mov ah, 0 
    int 16h 
    mov ah, 2 
    mov dl, al 
    int 21h  ;◄■■ DISPLAY PRESSED KEY. 
move_snake: 
    mov ah, 2 
    mov dl, '.' 
    int 21h  ;◄■■ DISPLAY SOMETHING. 
    jmp game 

    mov ax, 4c00h 
    int 21h 
+1

Спасибо, человек! действительно необходимо, чтобы – user6181605