如何在 C++ 中执行另一个 while 循环期间获取流输入

How do I get stream input during execution of another while loop in c++

我正在用 c++ 编写一个游戏,它使用 pdcurses 从用户那里获取输入并在命令行终端上显示不断变化的玩家状态。我使用 while 循环不断更新玩家的健康状况(一个数字值),它通过一个小状态栏打印到屏幕上。它每秒循环多次,这给游戏带来了实时感。虽然程序是 运行,但我希望即使我与游戏互动,这个值也能不断更新。例如,我想在不中断我的小状态显示循环的情况下发出 "eat food" 或 "chop wood" 之类的命令。我在设计这部分的功能时遇到了问题。我如何在与游戏互动时保持我的状态更新?我担心当用户在终端中输入内容时,while 循环暂停并且状态不再继续更新。我正在寻找一些通用的指针,而不是实际的代码。我真的很感激。我对编程还很陌生。

我是否必须使用多个线程,或者有没有办法让 while 循环在用户向屏幕输入文本时继续运行?感谢您提供的任何指示。我希望这不是一个太令人困惑的问题。

FWIW,这是我目前的伪代码:

#include //....some files....
int main() {

// Initialize game objects and graphics
bool programRunning = true;
float playerEnergy = 3000.0;

initscr();          /* Start curses mode          */
while (programRunning)
{
    // Display some graphics
    // Display playerEnergy
    // Set the while loop speed using std::this_thread::sleep_for...
    playerEnergy -= 0.01;

    int ch;
    ch = getch();

    switch (ch) {
        case 'e':  //eat food
            playerEnergy += 1000;
            // Do some stuff
            break;
        case 'w':  //do some work
            playerEnergy -= 1000;
            // Do some stuff
            break;

        /* Etc, Etc.  */

        default:
            break;
        }

    // If player quits, set programRunning to false
}

endwin();           /* End curses mode        */
return 0;

}

正如你所建议的,多线程是我在这里的方式。

我看到 here 使用 getch 可以解决你的问题,如果你使用 nodelay(stdscr,TRUE); 使它成为一个非阻塞调用,但我自己没有使用它

这取决于你在做什么,但我通常更喜欢 halfdelay() -- 它让你有非阻塞输入而不用将 CPU 固定在 100%。或者,您可以使用 nodelay() 并在适当时手动调用 napms()