2

我正在用 c++ 编写一个使用pdcurses的游戏从用户那里获取输入并在命令行终端上显示播放器不断变化的状态。我使用 while 循环来不断更新玩家的健康状况(一个数字值),它会打印到屏幕上并带有一个小状态栏。它每秒循环多次,这给游戏带来了实时的感觉。在程序运行时,即使我与游戏交互,我也希望此值不断更新。例如,我想在不中断我的小状态显示循环的情况下发出“吃食物”或“砍柴”之类的命令。我在设计这部分的功能时遇到了麻烦。我如何在与游戏互动时保持状态更新?我担心当用户在终端中输入内容时,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;

}

4

2 回答 2

2

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

我在这里看到 usinggetch可以解决您的问题,如果您将其设为非阻塞调用 using:nodelay(stdscr,TRUE);但我自己没有使用过

于 2015-10-14T06:15:40.943 回答
1

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

于 2015-10-15T18:02:59.703 回答