【问题标题】:Getting keyboard input without echo in DOS在 DOS 中获取没有回显的键盘输入
【发布时间】:2016-06-04 12:27:48
【问题描述】:

我正在制作“连接四人”游戏。

玩家必须输入一个介于 1-4 之间的数字,这样光盘才会落入其中一列。我目前正在撰写第一列。问题是你可以输入任何字符并且它会起作用(它只需要在你按'1'时起作用)我不知道如何解决它。

此外,数字显示在屏幕左侧。 如何做到让我输入的数字不显示在屏幕上?

PlayerOneTurn:
    cmp [Player1Turn], 255
    je Player1Pressed1

Player1Pressed1:
    mov ah, 1
    int 21h
    cmp al, 31h
    je Player1Check1

Player1Check1:
    cmp [FirstColumnArray], 0
    inc [FirstColumnArray]
    je DrawPlayer1Disc
    cmp [FirstColumnArray + 1], 0
    inc [FirstColumnArray]
    je DrawPlayer1Disc
    cmp [FirstColumnArray + 2], 0
    inc [FirstColumnArray]
    je DrawPlayer1Disc
    cmp [FirstColumnArray + 3], 0
    inc [FirstColumnArray]
    je DrawPlayer1Loop

DrawPlayer1Loop:
    mov bh,0h
    mov cx,[Player1Draw1x]
    mov dx,[Player1Draw1y]
    mov al,[player1disccolor]
    mov ah,0ch
    int 10h
    inc [Player1Draw1x]
    cmp cx, 38h
    jl DrawPlayer1Loop

DrawPlayer1Disc: 
    mov bh, 0h
    inc [Player1Draw1y]
    mov [Player1Draw1x], 25h
    cmp dx, 09Bh
    jl DrawPlayer1Loop

运行时我的项目如下所示:

【问题讨论】:

    标签: assembly keyboard x86 tasm dosbox


    【解决方案1】:
    mov ah, 1
    int 21h
    cmp ah, 31h
    

    您使用的 DOS 函数在 AL 寄存器中产生结果!
    使用cmp al, 31h 比较“1”按键。

    要不在屏幕上回显输入,请使用 DOS 函数 7 而不是 1。

    mov ah, 7
    int 21h
    cmp al, 31h
    

    Player1Pressed1:
     mov ah, 1
     int 21h
     cmp al, 31h
     je Player1Check1
    Player1Check1:
    

    使用此代码,您始终可以在 Player1Check1 处执行代码。当输入不是“1”时,您需要跳离它。添加jmp

    Player1Pressed1:
     mov ah, 1
     int 21h
     cmp al, 31h
     je Player1Check1
     jmp ELSEWHERE_YOU_KNOW_WHERE_THIS_IS
    Player1Check1:
    

    【讨论】:

    • 感谢您的回答。我更改了代码,但它仍然无法正常工作。我应该在这里写我所有的代码吗?
    • 我认为最好显示更多您的代码。您展示的图片并没有告诉我们太多信息!
    • 我已经添加了代码。我正在制作“连接四人”游戏。如果你不明白我的代码,问我,我会告诉你它的作用。
    • 这解决了我的一个问题,谢谢。但是,当我按任意键时它仍然会绘制一张光盘,我希望它只有在我按“1”时才绘制光盘。我改成 cmp al, 31h 还是不行。
    • @PeterCordes:没问题。我一般不看问题历史,所以不知道它最初是如何措辞/​​标记的。假设他想针对 DOSBOX 中允许的 32 位指令,他必须在汇编器顶部添加 .386 指令并链接(使用带有 /3 的 TASM)选项
    猜你喜欢
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    相关资源
    最近更新 更多