我正在用ncurses编写一个俄罗斯方块游戏,用getch()获取键盘输入。对于完成的游戏,nodelay()将处于活动状态,但出于测试目的,我已将其注释掉。由于某种原因,我的游戏循环调用的输入函数忽略了每个第二个字符。例如,'q'的输入关闭了我的程序。如果我输入一个aqaqaqaqaq序列......程序将永远不会关闭,因为q没有注册。下面是init我的ncurses代码的函数,下面是我的输入函数。
编辑:如果重要,我正在测试在Windows上运行在虚拟机中的Ubuntu中的代码。
****INIT FUNCTION****
void init_ui()
{
initscr();
cbreak();
raw();
keypad(stdscr, TRUE);
noecho();
//nodelay(stdscr, TRUE);
start_color();
init_pair(9, COLOR_BLACK, COLOR_RED);
init_pair(2, COLOR_BLACK, COLOR_WHITE);
init_pair(3, COLOR_BLACK, COLOR_CYAN);
init_pair(4, COLOR_BLACK, COLOR_YELLOW);
init_pair(5, COLOR_BLACK, COLOR_MAGENTA);
init_pair(6, COLOR_BLACK, COLOR_BLUE);
init_pair(7, COLOR_BLACK, COLOR_GREEN);
init_pair(8, COLOR_BLACK, COLOR_BLACK);
attron(COLOR_PAIR(6));
for(int i=0; i<HEIGHT; i++)
{
mvprintw(i, 0, "#%*c", WIDTH*2+1, '#');
}
for(int i=0; i<=WIDTH; i++)
{
mvprintw(HEIGHT, i*2, "##");
}
attroff(COLOR_PAIR(6));
}
****INPUT FUNCTION****
int get_input()
{
int ch = getch();
int result;
switch(ch)
{
case KEY_LEFT:
result = LEFT;
break;
case KEY_RIGHT:
result = RIGHT;
break;
case KEY_DOWN:
result = DOWN;
break;
case 'q':
result = 'q';
break;
default:
result = DOWN;
break;
}
return result;
}
答案 0 :(得分:2)
原来我在程序的另一部分留下了一个迷路getch(),我忘了删除它。我的一个愚蠢的错误。