ncurses:在 C++ 中处理终端中的键盘输入

ncurses: handle keyboard inputs in the terminal in C++

提问人:Th0rgal 提问时间:11/17/2020 更新时间:11/17/2020 访问量:1377

问:

我正在尝试在终端内构建一个简单的俄罗斯方块游戏。当玩家按下箭头键时,我需要移动棋子。我听说过 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();

真诚地 托马斯

C++ ncurses

评论

0赞 Kostas 11/17/2020
您始终可以使用 wasd
1赞 Tony Delroy 11/17/2020
getch()应返回 、 或 按下时。尝试在循环之前添加调用。KEY_UPKEY_DOWNKEY_LEFTKEY_RIGHTraw(); keypad(stdscr, TRUE); noecho();
0赞 kunif 11/17/2020
这些文章可能会有所帮助。NCURSES- 未检测到箭头键?11.与键盘连接

答:

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。