2016-10-14 1 views
0

私は<windows.h><conio.h>をWindows上でこの種のものに使用しましたが、UNIXでは唯一見つけられるのは<ncurses.h>で、多くのCを使い、多くのC++機能をサポートしていません。オブジェクト指向プログラミングもできるのですが、コンソールカーソルを(x、y)に移動するにはどうしたらいいですか?Unix上でコンソールカーソルを(x、y)に移動するにはどうすればいいですか?

編集:私はコンソールとしてディスプレイとしてC++で簡単なゲームを作ろうとしています。私はそれが理想的ではないことを知っていますが、これはVisual C++や他のグラフィックスを使用できないプロジェクトのためのものです。蛇や掃除機のようなものを考えてください。処理中に画面全体を更新することなく、別の場所にあるcoutにアクセスできるようにする必要があります。 UNIXシステムとの互換性が必要です。

答えて

1

1つの非常に簡単な方法はANSI escape codesを介してである:

#include <iostream> 

void moveCursor(std::ostream& os, int col, int row) 
{ 
    os << "\033[" << col << ";" << row << "H"; 
} 

int main() 
{ 
    moveCursor(std::cout, 1,1); 
    std::cout << "X (1,1)"; 
    moveCursor(std::cout, 13,8); 
    std::cout << "X (13,8)" << std::endl; 

    return 0; 
} 

配列<ESC>[,COLHアブソルートカーソルの位置決めを行う(エスケープ文字は、ASCII 27進又は'\033'です)。ほとんどの一般的な端末では、これは左上隅に1つの「X」を、列13、行8には2つ目を置く必要があります(カウントは1から始まります)。

編集:hvdのコメントは当然のことです。これは非常に簡単ですが、理由のためにncursesは複雑です。単純なエスケープコードよりもはるかに多様な設定で、より確実に動作することが保証されています。あなたが実際に達成したいことに応じて、私はあなたの問題の解決策としてこの単純なハックを選ぶ前に、あなたが非常に慎重でなければならないhvdに同意します。

+1

したがって、cursesより読みにくく、cursesより移植性が低く、cursesと同じようにオブジェクト指向ではありません。私はOPにこれを行なわせることをお勧めしません。 – hvd

+0

@hvd私は同意します。たぶん私はそれを書くべきでしょう。 – mindriot

+0

私はこれが私のために働くとは思わない。私はcout、ファイルI/O、および複数のクラスとインスタンスのようなもので動作する必要があります。他の方法はありますか? –

関連する問題