普通にgetch()
すると入力があるまで待っているが、
timeout()
関数で待ち時間をセットしてからgetch()
する
と、時間切れで先に進ませることができる。
#include <curses.h>
void yesno()
{
addstr("yesかnoか(y/n)?: ");
refresh();
}
int main()
{
int i, answer;
char *sekashi[] = {
"わからんけ", "はよ答えなはれ", "だめけ", "ぶっぶー"
};
int nummsg = (sizeof sekashi)/sizeof(char*); //メッセージの個数
initscr(); cbreak();
/* noecho(); - 押したキーを画面に出す場合は noecho() しない */
addstr("社会契約論の著者ルソーは、");
addstr("童謡「むすんでひらいて」を作った。");
yesno();
answer = getch(); /* タイムアウト無し */
if (answer == 'y') {
addstr("\n正解!\n");
} else {
addstr("\nぶっぶー、yesじゃ。常識じゃ!\n");
}
timeout(3000); /* タイムアウトを3秒に */
addstr("韓国語でたくわんのことをタクワンという。");
yesno();
for (i=0; i<nummsg; i++) {
answer = getch(); /* 1秒で時間切れ */
if (answer == ERR) { /* 時間切れのとき */
beep(); /* 音をならして */
addstr("\n");
addstr(sekashi[i]);
addstr("\n");
yesno();
} else {
if (answer == 'y') {
addstr("\nそう!\n");
} else {
addstr("\n外れ!\n");
}
break;
}
}
addstr("たくわんは、タクワン、割箸のことをワリバシというらしいぞ\n");
addstr("(リターンで終了)\n");
refresh();
timeout(-1);
nocbreak();
getch();
endwin();
}