0

「DOS」出力をローグライクな方法で表示する方法を探しています。ユーザーがボタンを押したり、マウスでクリックしたりすると、変更または移動できる文字(レベル)で満たされたDOSウィンドウがあるように見えます。

通常の DOS ウィンドウ (従来の C++ プログラムまたは .bat からの出力など) では、「さらにテキストを書き込む」ことしかできず、面倒でアーティファクトを引き起こす何かが変更された場合は、レベル全体を再描画する必要があります (更新されたレベルはゆっくりとスクロールします)。 )。

QtやSDLなどを使用して文字で2Dタイルを描画してこの問題を克服できることはわかっていますが、やりたいことは複雑に思えます。 /「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 を追求する目的である場合は、呪いを学ぶことでクロスプラットフォームになり、Rogue のソース コードなどをよりよく理解できるようになります。

そして、実際の DOS エミュレーションを開始することが目標である場合 ( DOSBoxに従って)、別の一般的なオプションがありました。それは、スクリーン メモリに直接アクセスすることです。あなたはのぞき見することができます...正しい場所に65を書くと、「A」が現れます.

それからANSI.SYSがありました。これは当時多くの掲示板システムで使用されていましたが、同様に時代遅れです。

于 2012-11-21T09:05:10.453 に答える
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 に答える
1

もう1つの選択肢:

QPlainTextEditQt の、QTextEditまたはなどのテキスト エリア ウィジェットを作成QTextBrowserし、読み取り専用にし、フォントを固定幅に設定し、目的の色のテキスト、固定行数の固定文字数で埋めます。

于 2012-11-21T10:41:02.467 に答える
1

これは、役立つ一連の関数を含む MSDN リンクです

ほとんどの場合、できます

SetConsoleCursorPosition
WriteConsole

何度でもやりたいことをやる。

于 2012-11-21T09:01:34.563 に答える
1

それが本当に DOS の場合、ansi.sys はカラー コードとカーソルの位置を有効にします。テストしていません、HTH。

また、多くのシステムに移植されたライブラリであるncursesを確認することもできます。

于 2012-11-21T09:01:48.983 に答える