2017-03-07 41 views
0

我从学校得到了一个组装蛇游戏的任务。
我已经完成了所有的游戏,但我无法想出一个办法来做一件事 - 让没有按键的蛇在相同的方向移动。ASM:检查是否没有按键

目前,每个步骤后,我的代码调用此代码来获取下一个关键:
mov ah,1h int 21h ; store at al
但这个代码等待,直到用户将按下的东西,所以他不适合这种情况下。
是否有人知道一段时间后,如果没有按键被按下,计数代码?
此外感谢:)

回答

1

试试这个:

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: 
    ... 

服务0Bh不会停止代码的执行,这样你就可以知道什么时候按下一个键或者当它不是。

+0

非常感谢!这是工作:) – Idan

+1

关于'INT 21/AH = 0Bh' vs'INT 16/AH = 01'的好处是前者从DOS2 +开始检查STDIN,而不是物理键盘。 Upvoted。 –

0

有中断设置变量。读取后使用计时器清除它。使用变量来确定执行哪个代码:直/左/右

+0

嗨,但我没有得到你的答案。我的问题是,程序一直在等待,直到按下一个键,如果没有按键 - 程序将不会继续。我已经有了你提到的功能,所以如果你可以更清楚你的答案? – Idan