提问人:Th0rgal 提问时间:11/17/2020 更新时间:11/17/2020 访问量:1377
ncurses:在 C++ 中处理终端中的键盘输入
ncurses: handle keyboard inputs in the terminal in C++
问:
我正在尝试在终端内构建一个简单的俄罗斯方块游戏。当玩家按下箭头键时,我需要移动棋子。我听说过 getch() 方法,但它似乎不适用于箭头键(它们都是使用相同的 int 代码检测到的:27)。我该怎么办?
这是我当前的代码:
initscr();
int inputCode;
do
{
inputCode = getch();
// here I would put my code to move the pieces if the code is right
} while (inputCode != 113); // q to exit
endwin();
真诚地 托马斯
答:
2赞
Thomas Dickey
11/17/2020
#1
如手册页中所述:
Most programs would additionally use the sequence:
intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);
也就是说,您的程序应该打开键盘模式以获取 ,等等:KEY_UP
键盘选项启用用户终端的键盘。如果启用(bf 为 TRUE),用户可以按功能键(如箭头 key) 和 wgetch(3x) 返回一个表示函数的值 键,如KEY_LEFT。如果禁用(bf 为 FALSE),则 curses 不会处理 特别是功能键,程序必须自行解释转义序列。如果终端中的键盘可以打开(使 传输)和关闭(使其在本地工作),打开此选项 导致在调用 wgetch(3x) 时打开终端键盘。 键盘的默认值为 FALSE。
评论
getch()
应返回 、 或 按下时。尝试在循环之前添加调用。KEY_UP
KEY_DOWN
KEY_LEFT
KEY_RIGHT
raw(); keypad(stdscr, TRUE); noecho();