在 DOS 中获取没有回显的键盘输入

2023-11-30

我正在制作游戏“Connect Four”。

玩家必须输入 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

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

A picture of the object


mov ah, 1
int 21h
cmp ah, 31h

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

To not使用 DOS 功能 7 而不是 1 让输入在屏幕上回显。

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

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

使用此代码,您始终执行代码玩家1检查1。当输入不是“1”时,你需要跳开它。添加一个jmp

Player1Pressed1:
 mov ah, 1
 int 21h
 cmp al, 31h
 je Player1Check1
 jmp ELSEWHERE_YOU_KNOW_WHERE_THIS_IS
Player1Check1:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 DOS 中获取没有回显的键盘输入 的相关文章

  • 在 REP MOVSW 之前 PUSH CS / POP DS 的目的是什么?

    为什么在下面的代码中我们压入代码段 PUSH CS 然后将其弹出到数据段 POP DS 我将这些行明确指定为 line1 和 line2 请告诉我 MOVSW 在这里是如何工作的 IF HIGHMEMORY PUSH DS MOV BX D
  • 遍历内存编辑每个字节

    我正在编写汇编代码 提示用户输入一串小写字符 然后输出包含所有大写字符的相同字符串 我的想法是迭代从特定地址开始的字节 并从每个字节中减去 20H 将小写变为大写 直到到达具有特定值的字节 我对 Assembly 相当缺乏经验 所以我不确定
  • 如何检测 OS X 上是否按下了某个键?

    我正在为 OSX 编写 Spritekit 游戏 如何检查当前是否按下某个键 考虑这个例子 some code this could be e g inside a game loop if is key w pressed move fo
  • Clang 使用 -nostdlib 生成崩溃代码

    我正在尝试为可执行文件设置自己的运行时环境 但无法使用 clang v3 4 1ubuntu1 目标 x86 64 pc linux gnu 来生成没有段错误的可执行文件 我已将问题简化为以下内容 如果我有一个文件 crt1 c 除了满足
  • 即使我确实为变量设置了初始值,数据段也没有被初始化

    我已经编写了一个代码 该代码应该生成某种数字列表 但是即使我为它们分配了初始值 我的数据段变量也没有被初始化 This is how DS 0000 looks when I run it 这是我的代码 但数据段只保留垃圾值 MODEL s
  • orpd等SSE2指令有什么意义?

    The orpd指令是 压缩双精度浮点值的按位逻辑或 这不是做完 全相同的事情吗por 按位逻辑或 如果是这样 拥有它还有什么意义呢 请记住 SSE1orps https www felixcloutier com x86 orps首先 实
  • 汇编-符号标志和奇偶校验标志

    我不明白什么时候设置标志标志 什么时候设置奇偶校验 据我所知 符号标志表示运算结果的符号 0表示正数 1表示负数 那么为什么在下一个代码中 mov al 5 sub al 124 SF为零 结果是负数 关于PF 为什么a和b中设置了PF a
  • 为什么不能执行 mov [eax], [ebx] [重复]

    这个问题在这里已经有答案了 我可以做这个 mov eax ebx 和这个 mov eax ebx 甚至这个 mov eax ebx 但不是这个 错误C2415 mov eax ebx 只是wtf 为什么 它与 ptr1 ptr2 相同 为什
  • 如何在IOS中自定义键盘[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想在我的应用程序中为 IOS 创建
  • 近调用/跳转表并不总是在引导加载程序中工作

    一般问题 我一直在开发一个简单的引导加载程序 并在某些环境中偶然发现了一个问题 在这些环境中 此类指令不起作用 mov si call tbl SI Call table pointer call call tbl Call print c
  • 从汇编程序获取命令行参数

    通读 专业汇编语言书籍 似乎它提供了用于读取命令行参数的错误代码 我纠正了一点 现在它从段错误变成了读取参数计数 然后是段错误 这是完整的代码 data output1 asciz There are d params n output2
  • 为什么x86分页没有特权环的概念?

    早在 1982 年 当 Intel 发布 80286 时 他们在分段方案中添加了 4 个特权级别 环 0 3 由全局描述符表 GDT 和局部描述符表 LDT 中的 2 位指定 在 80386 处理器中 Intel 添加了分页功能 但令人惊讶
  • 为什么 GCC 不将 a*a*a*a*a*a 优化为 (a*a*a)*(a*a*a)?

    我正在对科学应用程序进行一些数值优化 我注意到的一件事是 GCC 会优化调用pow a 2 通过将其编译成a a 但是调用pow a 6 没有优化 实际会调用库函数pow 这大大降低了性能 相比之下 英特尔 C 编译器 http en wi
  • Nasm 打印到下一行

    我用 nasm Assembly 编写了以下程序 section text global start start Input variables mov edx inLen mov ecx inMsg mov ebx 1 mov eax 4
  • 我如何在 LibGDX 应用程序中找到软键盘的高度

    我正在开发一个Android游戏与LibGDX 我需要找到用户正在使用的软键盘的高度 因为我想在键盘正上方显示一些对象 我读过这个帖子 如何获取 Android 上的软键盘高度 https stackoverflow com questio
  • 寄存器寻址模式与直接寻址模式

    我在试卷中遇到过这个问题 它指出 哪种给定的寻址模式更快 为什么 寄存器寻址方式 直接寻址方式 现在根据我的说法 寄存器寻址模式应该更快 因为寄存器是计算机中最快的存储位置 这是正确答案吗 请帮忙 谢谢 两种寻址模式之间的区别是 地址的来源
  • 有没有办法使用 i387 fsqrt 指令获得正确的舍入?

    有没有办法使用 i387 fsqrt 指令获得正确的舍入 除了改变精确模式在 x87 控制字中 我知道这是可能的 但这不是一个合理的解决方案 因为它存在令人讨厌的重入型问题 如果 sqrt 操作中断 精度模式将出错 我正在处理的问题如下 x
  • “rep stos”x86 汇编指令序列有什么作用?

    我最近偶然发现了以下汇编指令序列 rep stos dword ptr edi For ecx重复 存储内容eax到哪里edi指向 递增或递减edi 取决于方向标志 每次 4 个字节 通常 这用于memset型操作 通常 该指令简单地写成r
  • 从 NASM 调用 C 函数 _printf 会导致分段错误

    我一直在尝试使用 NASM 在 Mac OS 和 Windows 上学习 64 位汇编 我的代码是 extern printf section data msg db Hello World 10 0 section text global
  • 为什么我的空循环在 Intel Skylake CPU 上作为函数调用时运行速度是原来的两倍?

    我正在运行一些测试来比较 C 和 Java 并遇到了一些有趣的事情 在 main 调用的函数中 而不是在 main 本身中 运行具有优化级别 1 O1 的完全相同的基准代码 导致性能大约翻倍 我正在打印 test t 的大小 以毫无疑问地验

随机推荐

  • 在 GitHub 中分叉我的存储库

    我在 GitHub 上有一个存储库 有人分叉了该仓库 并在他们的分叉中做了一些工作 我想在他们发出拉取请求以将存储库返回到我拥有的主存储库之前分叉他们的分叉来帮助他们 问题是 当我尝试分叉他们的 我的仓库 时 它不允许我将其分叉回我的 区域
  • ServletContext 资源中定义的名称为“offlineTokenServices”的 bean 定义无效 [/WEB-INF/spring-security.xml]

    谢谢你支持运行approuter打包到本地 现在运行时出现以下异常firstapp在本地 I add xs appname xs uaa clientid xs uaa identityzone xs uaa verificationkey
  • 按时间间隔合并两个 pandas 数据帧

    我有两个熊猫数据框 格式如下 df ts pd DataFrame 10 20 1 id1 11 22 5 id1 20 54 5 id2 22 53 7 id2 15 24 8 id1 16 25 10 id1 columns x y t
  • ColdFusion - java对象方法调用

    我正在尝试从我的服务器获取数据源列表 是的 我是服务器所有者 这不是黑客 我认为我通过给出两个例子混淆了这个问题 所以我正在用一个例子和堆栈跟踪编辑这篇文章 Code Create Data Source Object admin new
  • MVC 4 基于 DropDownListFor 选择更改多个显示字段

    MVC 4 根据 DropDownListFor 选择更改字段 首先 与上面的问题几乎相同 但解决方案不适用于这个问题 我有一个包含下拉列表的页面 选择后 它将根据选择更改显示字段 视图中的 javascript 是
  • 我可以从 VBScript 初始化用 JScript 编写的对象吗?

    我正在尝试编写 WSH 登录脚本 全公司的管理员需要能够自定义脚本的执行 并针对特定位置和用户执行其他脚本 为了让他们的工作更轻松 我想提供一个 API 管理员可以在他们的脚本中访问 如果我使用 JScript 编写 API 是否可以通过
  • 什么是比较两个 SQL Server 数据库的免费工具? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 什么是比较两个 Sql S
  • 按字母顺序对逗号分隔列表进行排序 PHP [重复]

    这个问题在这里已经有答案了 我将 PHP 变量中的数据放在逗号分隔的列表中 这是数据 其中一部分是为了节省空间 xyz Europe France Italy Spain UK US Nordic West Europe Belgium L
  • jquery.d.ts 编译失败:TsLint:超出最大行长度

    我正在使用 VS 2013 和 TypeScript 0 95 版本 但 linter 无法进行 TS 编译并出现以下错误 TsLint 已检查 app ts TsLint jquery d ts 编译失败 TsLint 超过最大行长度 1
  • 如何从数据表更新面板[重复]

    这个问题在这里已经有答案了 带有 id myButtonId2 的命令按钮工作正常 我的意思是它更新 myOutputPanel 但数据表内的命令按钮不会更新outputPanel 数据表有特定的更新样式吗
  • Stripe Connect Firebase 功能

    仔细查看后 尝试通过 swift 捕获代码 但仍然需要一个函数来触发代码以获取 Express 帐户进行连接 不会在代码尝试上浪费您的时间 因此寻找 Firebase 函数来设置 Stripe Connect 端点以进行重定向并发回代码以完
  • 提高请求的下载速度

    我正在编写一个从 Dropbox 下载一些视频的脚本 通常我的下载速度约为 150 kb 秒 这是在 Firefox 或 IDM 上使用普通下载器时的情况 但使用此 Python 脚本时 速度变得太慢 不到 10 kb 秒 这是我正在使用的
  • 在 Xcode 中禁用“/* inside block comment”警告

    我在开发时经常需要多个嵌套的多行 或 部分行 注释 Xcode 最近引入了可能是世界上最烦人的警告 它迫使我禁用 警告作为错误 我猜这个警告是为了捕获一种极其罕见的情况 即某人打字错误并导致块 注释没有结束 但 IME 还有许多其他问题会导
  • shebang/hashbang 是做什么用的?

    除了使 AJAX 内容可供 Google 抓取外 shebangs hashbangs 是否还有其他用途 或者就是这样 在 URL 中使用的哈希早在 Ajax 发明之前就已经存在了 它最初的目的是作为页面内子部分的引用 在这种情况下 例如
  • 批量更新xml文件

    我已经搜索了一个小时但没有成功 我的老板希望它是一个批处理文件 我有一个 xml 文件 其中包含以下内容
  • PowerShell 的 Invoke-RestMethod 相当于curl -u(基本身份验证)

    相当于什么 curl u username password 在 PowerShell 中Invoke RestMethod 我试过这个 securePwd ConvertTo SecureString password AsPlainTe
  • iOS 8.1 自动旋转

    在我的项目中 我检查了我需要的所有方向类型 这在 iOS 7 1 上工作正常 但在 iOS 8 1 上无法正常工作 在 iOS 8 1 中 当我以纵向或横向模式打开应用程序时 它工作正常 但在使用过程中我旋转设备时 只有状态栏会更改旋转 我
  • Rails 3/delayed_job - Wanted:延迟邮件的基本示例

    我一直在试图弄清楚如何使用elasted job和rails 3发送延迟邮件 我已经尝试了几乎所有我能想到的可行可能性的组合 我可以让邮件在后台运行 我就是可以 不要让它延迟发送到未来的时间 数据库中的delayed jobs表清除任务 日
  • 如何自动检测Excel中的表格

    我有一本工作簿 其中包含大约 40 个表格 每个文件中的表格都非常混乱 因此您永远不知道表格可能位于工作表中的位置 在某些工作表中 您甚至可能有 2 个或 3 个表 此外 这些表非常非结构化 因此您无法知道行索引或列索引总是在哪里 我确实需
  • 在 DOS 中获取没有回显的键盘输入

    我正在制作游戏 Connect Four 玩家必须输入 1 4 之间的数字 以便圆盘落入其中一列 我目前正在研究第一专栏 问题是你可以输入任何字符并且它会起作用 它只需要在你按 1 时起作用 并且我不知道如何修复它 此外 该数字出现在屏幕左