c++ - 在 DOS 窗口中的任意位置写入

标签 c++ windows dos roguelike

我正在寻找一种以 Roguelike 方式显示“DOS”输出的方法,即。它看起来就像你有一个充满字符(级别)的 DOS 窗口,当用户按下按钮、点击鼠标等时,这些字符可以改变或移动。

在普通的 DOS 窗口中(比如经典的 c++ 程序或 .bat 的输出)你只能“写更多的文本”,如果有任何变化,你必须重新绘制整个关卡,这很麻烦并导致人工制品(更新的关卡慢慢滚动)。

我知道我可以使用 Qt 或 SDL 并绘制带有字符的 2D 图 block 来克服这个问题,但是对于我想做的事情来说这似乎很复杂,有没有一种简单的方法(比如 C++ 库)可以让我绘制字符“DOS”窗口中的任何位置?

谢谢!

[编辑] 谢谢,我会检查你的所有建议,为所有人 +1!

[编辑]PDCurses 获胜,可以在此处找到有关如何使用它的教程(上面写着 NCurses,但对于一个简单的 Hello world 示例来说它工作得非常好): http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/

最佳答案

编写 Rogue 时,它​​使用了 curses screen control library .

您可以获得它的各种 Windows 实现。一些将 curses 调用转换为普通的 Windows 控制台调用:

PDCurses for Windows

其他人制作了一个真正的 GUI 窗口,然后在“伪造的”终端中绘制粗体和下划线等增强功能(就像您使用 Qt 或 SDL 绘制图 block 的想法):

PDCurses for "real" Windows

如果您想将自己直接绑定(bind)到 Microsoft 很少使用的控制台 API 函数,您可以这样做。但是,如果怀旧是你在这个时代追求这样一个 UI 的目标,那么学习 curses 会让你跨平台并且让你更好地理解诸如 Rogue 源代码之类的东西。

如果进入实际的 DOS 仿真是您的目标(根据 DOSBox ),还有另一个流行的选择:直接访问屏幕内存。您可以四处张望……在正确的位置写一个 65,然后会出现一个“A”。

然后是ANSI.SYS ,它在过去的许多公告板系统中使用...但同样已过时。

关于c++ - 在 DOS 窗口中的任意位置写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13489542/

相关文章:

c++ - 好友模板函数无法访问私有(private)成员

c++ - eclipse 朱诺 CDT : Incompatibility with C++11 and debugging issues

c++ - 我在 VS12 中编写代码,但它无法在 Linux 上编译

batch-file - Windows 批处理文件 "start"命令未打开完整 URL

assembly - 近跳自动改为短跳

mysql - 将限制 GET 参数直接传递给 MySQL 安全问题?

java - 使用 Android NDK 从 .so 文件调用 Native 函数

c++ - Boost::MPL Vector 和 For_Each:如何将 avector 打印为元组?

python - 将少量 python 嵌入到批处理脚本中

windows - Eclipse W10 Rust 配置 "RLS"