2016-08-04 3 views
0

私は小さなゲームを作っています。コンソールで再生できるはずです。私はそのためにncursesを使用していますが、コードはコンパイルされますが、ゲームを開始するときにコンソールに何も表示されません。 gameareaは2d Vectorに保存され、値はこのVectorにあります。普通のprintfでncursesを使わずにチェックしましたが、ncursesを使用したい場合はコンソールに何も表示されません。Vectorに対してncursesを正しく使用していますか?

for (auto const& i : gamearea) { 
for (auto const& j : i){ 
    // Wall 
    if (j == '#') { 
    // printf("#\n"); 
    attron(5); 
    mvprintw(_height, _width, " "); 
    attroff(5); 
    } 

これは、関数のコードの一部です。この関数では、ほぼ同じコードのループが6つ以上あります。 gameareaは私の2番目のVectorで、_heightと_widthは空間の大きさを表す変数です。スペースが#を置き換えます。

私が知りたいことは、どこでncurses関数を間違って使用しているのですか?私は、他の機能に必要なすべてでターミナルを初期化している:

void Play::initTerminal() { 
    initscr(); 
    cbreak(); 
    noecho(); 
    curs_set(false); 
    nodelay(stdscr, true); 
    keypad(stdscr, true); 
    start_color(); 
    use_default_colors(); 
    init_pair(1, COLOR_BLACK, COLOR_BLACK); 
    init_pair(2, COLOR_GREEN, COLOR_GREEN); 
    init_pair(3, COLOR_BLUE, COLOR_BLUE); 
    init_pair(4, COLOR_YELLOW, COLOR_YELLOW); 
    init_pair(5, COLOR_WHITE, COLOR_WHITE); 
    init_pair(6, COLOR_RED, COLOR_RED); 
    init_pair(7, COLOR_CYAN, COLOR_CYAN); 
} 

は、たぶん私は、この関数で間違った何かをしました。以前はncursesを使っていましたが、printfを使っていましたが、今回はncursesの機能を使いたいと思っています。 私はここでこれに似たものを見つけられませんでした。

+0

あなたは 'refresh()'を呼び出していますか? –

+0

はい、私はrefresh()を呼び出しています。私は端末を初期化し、再生するために必要なすべての機能を持つ独立したクラスを持っています。リフレッシュがあります。しかし、ターミナルでは、最初のコードピースのコメントのように、私がprintfを使うときだけ、ターミナル上に何も描画しません。これは、Mainメソッドで関数を直接呼び出すときだけです。 – Lisa

+1

完全な例がないと、推測しかできません。例えば、あなたのメインプログラムはスレッドを使うかもしれませんが、うまく動かないでしょう。 –

答えて

0

あなたの色のペアは

init_pair (5, COLOR_WHITE, COLOR_WHITE) 

は、白い背景に白色の文字を書きます間違っています。

+0

これは他の問題を修正する可能性があります。ここでの問題は、私がattronとattroffを間違って使用したことでした。私はattron(COLOR_PAIR(5))の代わりにattron(5)を書いた。 – Lisa

関連する問題