在DOS窗口中的任何地方写入

时间:2012-11-21 08:55:45

标签: c++ windows dos roguelike

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

在正常的DOS窗口(比如来自经典c ++程序或.bat的输出)中,你只能“编写更多文本”,如果有任何变化,那么你必须重绘整个级别,这很麻烦并导致伪影(更新级别)慢慢滚动。)

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

谢谢!

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

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

5 个答案:

答案 0 :(得分:4)

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

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

PDCurses for Windows

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

PDCurses for "real" Windows

如果您希望将自己直接绑定到Microsoft极少使用的控制台API函数,则可以执行此操作。但如果怀旧是你在这个时代追求这样一个用户界面的目标,那么学习诅咒会让你跨平台让你更好地理解Rogue源代码之类的东西。

如果按照实际的DOS模拟开始是你的目标(根据DOSBox),还有另一个流行的选择:直接访问屏幕内存。你可以偷看并四处寻找......在正确的地方写一个65,然后出现“A”。

然后有ANSI.SYS,当天在许多公告牌系统上使用了......但同样过时了。

答案 1 :(得分:1)

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

很可能你可以

SetConsoleCursorPosition
WriteConsole

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

答案 2 :(得分:1)

如果它真的是DOS,那么ansi.sys将启用颜色代码和positioning cursor: 在server fault,有一个关于在Windows COMMAND.COM中启用ansi代码的线程。尚未测试,HTH。

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

答案 3 :(得分:1)

还有一个选择:

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

答案 4 :(得分: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;
}