在 ncurses 中使用数字键盘键
Posted
技术标签:
【中文标题】在 ncurses 中使用数字键盘键【英文标题】:Using number pad keys with ncurses 【发布时间】:2014-02-05 00:51:09 【问题描述】:我正在使用 C++ 的 ncurses 库编写一个 roguelike,并希望通过数字键盘控制角色。目前我正在使用以下方法:
case KEY_LEFT:
//Code for left movement
case KEY_RIGHT:
//Code for right movement
...
//Numpad diagonals
case KEY_A1:
//Code for moving up and to the left
case KEY_A3:
//Code for moving up and to the right
...
KEY_A1
、KEY_A3
、KEY_C1
和 KEY_C3
宏适用于对角线运动,但像 KEY_A2
这样的宏不适用于正交运动。无论numlock是否打开,方向键的代码在这种情况下也不起作用。
如何使用 ncurses 输入数字键盘上的 2、4、6 和 8 键?或者,我是不是搞错了,还有什么更好的方法?
【问题讨论】:
用 printw("%o\n",key); 打印键值然后将它与 ncurses.h 中的键值(通常在 /usr/include 中)进行比较,以查看返回的是哪个键。我的键盘为偶数键提供 KEY_UP 等 这取决于终端(例如,模拟器)。它适用于 xterm。一些所谓的TERM=xterm-256color
“终端”程序没有实现该功能。
【参考方案1】:
通过调用:
addch(inputChar);
我能够确定所有“标准”输入字符都是它们的 ASCII 等价字符,即:
'0'
、'1'
、'!'
、'@'
、'a'
、'b'
、'A'
、'B'
等...
小键盘当 Num Lock 开启时也是如此。或者,或者当 Num Lock 关闭时,您可以调用:
addstr((std::to_string((int)inputChar) + " ").c_str());
这将产生一个 ASCII #,你可以 #define
或类似的。
【讨论】:
以上是关于在 ncurses 中使用数字键盘键的主要内容,如果未能解决你的问题,请参考以下文章