2017-07-22 4 views
0

ncurses.hを使ってゲームのメニューを作成しています。この部分では、ユーザーが任意のキーを押すと、点滅するテキストを画面上に表示し、ループを終了するだけです。 conio.hでは、私は(完璧ではありませんでした)、これを使用:このため、入力を待たない文字を取得する

void start() 
{ 
    int i; 

    for (i = 0; i < 10; i++) 
    { 
     gotoxy(32, 18 - i); 
     printf("1024"); 
     Sleep(200); 
     clrscr(); 
    } 

    gotoxy(32, 8); 
    printf("1024"); 
    gotoxy (35, 18); 

    while (!kbhit())    

    { 
     textcolor(15);   
     gotoxy (15, 15); 
     printf("Press any key to continue..."); 

     if (kbhit() != 0)         

     Sleep(1000); 
     textcolor(0);   
     gotoxy (15, 15); 
     printf("Aperte qualquer tecla para continuar..."); 

     if (kbhit() != 0) 
      break; 

     Sleep(500); 

     if (kbhit() != 0) 
      break; 

    } 

    textcolor(15); 
    fflush(stdin); 
    clrscr(); 

} 

ncurses.hでは、私は同じことをやろうとしているが、getchは()は、ユーザの入力プログラムを待つように見えます実行を「一時停止」する。

void start() 
{ 
    int i, ch = 0; 

    for (i = 0; i < 10; i++) 
    { 
     attron(COLOR_PAIR(2)); 
     move(18 - i, 32); 
     printw("1024"); 
     refresh(); 
     usleep(200 * 1000); 
     clear(); 
     refresh(); 
    } 

    move(18, 35); 

    while (1) 
    { 
     if (getch() != 0) 
      break; 

     attron(COLOR_PAIR(2)); 
     move(15, 15); 

     printw("Aperte qualquer tecla para continuar..."); 
     refresh(); 

     usleep(1000 * 1000); 
     clear(); 
     refresh(); 
     move(15, 15); 
     printw("Aperte qualquer tecla para continuar..."); 

     usleep(500 * 1000); 

    } 

    attroff(COLOR_PAIR(2)); 
    system("clear"); 

} 

解決方法? ありがとう!

答えて

0

ncurses(任意のcursesの実装)では、初期化時にcbreakを呼び出すことで1文字入力を得ることができます(マニュアルページのInitializationを参照)。

また、usleepではなくnapmsを使用します。

あなたのプログラムがちょうど世論調査に期待し、getchを使用しているので、あなたはtimeoutnodelayを使用してgetch戻りERR例を無視する場合があります。たとえば、

cbreak(); /* control/C will kill the program */ 
timeout(10); /* 10 milliseconds is a good compromise */ 
while (1) 
{ 
    if (getch() == ERR) 
     continue; /* ignore, timeout expired with nothing read */ 
+0

ごめんなさい、申し訳ありませんが、私は特定の問題にタイムアウトまたはノードライを使用する方法がわかりません。ユーザーがx時間内に何かを押していないと、そのループを終了しますか? もし私がまだ何かを押すまで無期限にそのループに入りたいと思っていたら... ありがとうございました! – NeoFahrenheit

+0

ここに私は今、untikを持っています: 'while(1) { wattron(win、COLOR_PAIR(CONTINUE_START_ON)); mvwprintw(勝利、18,25、 "続行するには、任意のキーを押してください"); wrefresh(win); napms(1000); wattron(win、COLOR_PAIR(CONTINUE_START_OFF)); mvwprintw(勝利、18,25、 "続行するには、任意のキーを押してください"); wrefresh(win); napms(1000); タイムアウト(10); if(getch()== ERR) break; } ' – NeoFahrenheit

+0

breakout timeoutは役に立ちません。ループが1秒後に終了するためです。 –

関連する問題