gpt4 book ai didi

c++ - Getch() 与 linux c++ 中的显示函数不兼容

转载 作者:行者123 更新时间:2023-11-30 01:09:02 25 4
gpt4 key购买 nike

我正在为一个类(class)制作一个 2D 地牢探索类游戏。我试图在不需要按下回车键的情况下接收用户输入。具体来说,我想使用 w a s d 作为方向键在二维数组中移动。

我试过使用 ncurses 库,但它目前会干扰我的显示功能(我相信在使用 endl 时)。

通常我的看板显示如下:
xxx
xxx
xxx

但是当使用 ncurses 库中的 getch() 时,我的板看起来像:
xxx
......xxx
............xxx

有没有一种方法可以使用 curses 库中的 getch() 而不会干扰我的打印功能?

void ParkBoard::print() {
displayMessage();
for (int i = 0; i < getSize(); i++) {
cout << " ";
for (int j = 0; j < getSize(); j++) {
if (j == 0) {
parkBoard[i][j]->display();
}
else {
cout << " ";
parkBoard[i][j]->display();
}
}
cout << endl;
}

最佳答案

ncurses 期望它可以完全控制显示终端。您正在使用 ncurses 作为输入,但仍将输出输出到 std::cout

这是行不通的。至少在没有重大黑客攻击的情况下是这样。

ncurses 是一个全有或全无的交易。要么使用 ncurses 作为输入和终端输出,要么完全使用其他东西。

但是有一个更简单的解决方案,因为您要做的就是“接收用户输入而不需要按下回车键”:

  1. 只需将文件描述符 0 置于非阻塞模式,并使用 read() 从 fd 0 读取(因为 std::cin 在从非阻塞文件描述符读取)。

参见 fcntl(2)手册页,然后搜索 O_NONBLOCK。然后:

  1. 通过关闭 ICANON 标志将终端置于非规范模式。查看termios(3)手册页。这就是 ncurses 所做的,以访问原始击键。

如果程序中止,您需要做一些工作将终端恢复到规范模式,以便返回到“正常”终端模式下的 shell。

关于c++ - Getch() 与 linux c++ 中的显示函数不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40943743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com