0

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

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

我知道我可以使用 Qt 或 SDL 并用字符绘制 2D 瓷砖来克服这个问题,但我想做的事情似乎很复杂,有没有一种简单的方法(比如 C++ 库)可以让我在任何地方绘制字符/一个'DOS'窗口?

谢谢!

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

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

4

5 回答 5

4

在编写 Rogue 时,它​​使用了curses 屏幕控制库

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

适用于 Windows 的 PDCurses

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

“真实”Windows 的 PDCurses

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

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

然后是ANSI.SYS,它在当时的许多公告板系统上都使用过……但同样已经过时了。

于 2012-11-21T09:05:10.453 回答
1

这是一个 MSDN 链接,其中包含一系列可能对您有所帮助的功能:http: //msdn.microsoft.com/en-us/library/windows/desktop/ms682073%28v=vs.85%29.aspx

很可能你可以

SetConsoleCursorPosition
WriteConsole

一遍又一遍地做你想做的事。

于 2012-11-21T09:01:34.563 回答
1

如果它真的是 DOS,那么 ansi.sys 将启用颜色代码和定位光标:在服务器故障有一个关于在 windows COMMAND.COM 中启用 ansi 代码的线程。没有测试,HTH。

您可能还想检查ncurses,这是一个移植到许多系统的库。

于 2012-11-21T09:01:48.983 回答
1

另一种选择:

创建文本区域小部件,例如 Qt或QPlainTextEdit,将其设为只读,将字体设置为固定宽度,并用所需颜色的文本填充它,固定数量的行上的固定字符数。QTextEditQTextBrowser

于 2012-11-21T10:41:02.467 回答
1

试试这个:

#include <iostream>
#include <windows.h> 
using namespace std;


void gotoxy(int x, int y)
{
  static HANDLE hStdout = NULL;
  COORD coord;

  coord.X = x;
  coord.Y = y;

  if(!hStdout)
  {
    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  }

  SetConsoleCursorPosition(hStdout,coord);
}




int main(void)
{

  gotoxy(30 , 12);
  cout<<" Writing anywhere \n";

  gotoxy(1 , 22);
  cout<<" \nPress any key to continue\n";
  cin.ignore();
  cin.get();

   return 0;
}
于 2012-11-21T14:53:54.473 回答