2017-09-29 4 views
-1

私はC++とncursesの新人です。ユーザー入力がプレイヤーを制御できるように私のコードにinitscr()を追加すると、ディスプレイは開始時に表示されず、ディスプレイに表示されるボタンを押すと表示されますが、すべてが奇妙になります。これは、main()メソッドにinitscr()を追加した場合にのみ発生します。なぜこれをやっているのですか?どうすれば修正できますか?initscr()が表示を乱している

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

bool gameOver; 
bool pressed; 
const int width = 20; 
const int height = 20; 
int x, y, fruitX, fruitY, score; 
enum eDirection { STOP = 0, LEFT, RIGHT, UP, DOWN }; 
eDirection dir; 

void Setup() { 
    gameOver = false; 
    dir = STOP; 
    x = width/2; 
    y = height/2; 
    fruitX = rand() % width; 
    fruitY = rand() % height; 
    score = 0; 
} 

void Draw() { 
    system("clear"); 
    for (int i = 0; i < width + 2; i++) 
     cout << "#"; 
    cout << endl; 

    for (int i = 0; i < height; i++) { 
     for (int j = 0; j < width; j++) { 
      if (j == 0) 
       cout << "#"; 
      if (i == y && j == x) 
       cout << "O"; 
      else if (i == fruitY && j == fruitX) 
       cout << "F"; 
      else 
       cout << " "; 

      if (j == width - 1) 
       cout << "#"; 
     } 
     cout << endl; 
    } 

    for (int i = 0; i < width + 2; i++) 
     cout << "#"; 
    cout << endl; 
} 

void Input() { 
    switch (getch()) { 
     case 'a': 
      dir = LEFT; 
      break; 
     case 'd': 
      dir = RIGHT; 
      break; 
     case 'w': 
      dir = UP; 
      break; 
     case 's': 
      dir = DOWN; 
      break; 
     case 'x': 
      gameOver = true; 
      break; 
    } 
} 

void Logic() { 
    switch (dir) { 
     case LEFT: 
      x--; 
      break; 
     case RIGHT: 
      x++; 
      break; 
     case UP: 
      y--; 
      break; 
     case DOWN: 
      y++; 
      break; 
     default: 
      break; 
    } 
} 

int main() { 
    //initscr(); 
    Setup(); 
    while(!gameOver) { 
     Draw(); 
     Input(); 
     Logic(); 
    } 
    //endwin(); 
    return 0; 
} 

答えて

2

cursesを非cursesスクリーンコントロールでミキシングし、ライブラリ間の競合の結果を確認します。

cursesを使用する場合は、それを使用してください。正確に行う方法については、NCURSES Programming HOWTOを熟読してください。 (そこのドキュメントは、同様にPDCursesのほとんどに適用されます。)

TL; DR:画面にものを行うためにsystem()呼び出しを取り除き、および出力を印刷する*addstr()*printw()機能を使用しなさい。 [w]refresh()を忘れないでください。

関連する問題