在c+;中执行另一个while循环时,如何获取流输入+; 我正在编写一个C++游戏,用来从用户那里获取输入,并显示命令行终端上玩家的连续变化的状态。我使用while循环不断更新玩家的健康状况(一个数字值),它通过一个小状态栏打印到屏幕上。它每秒循环多次,给游戏带来实时感。当程序运行时,我希望即使我与游戏交互,该值也能不断更新。例如,我希望在不中断我的小状态显示循环的情况下发出“吃东西”或“砍柴”之类的命令。我在设计此部件的功能时遇到问题。当我与游戏互动时,如何保持状态更新?我担心的是,当用户在终端中输入内容时,while循环被暂停,状态不再继续更新。我在寻找一些通用的指针,而不是实际的代码。我真的很感激。我对编程相当陌生
我是否必须使用多个线程,或者当用户在屏幕上输入文本时,while循环是否有办法继续运行?谢谢你的指点。我希望这不是一个太令人困惑的问题 FWIW,这是我到目前为止的伪代码:在c+;中执行另一个while循环时,如何获取流输入+; 我正在编写一个C++游戏,用来从用户那里获取输入,并显示命令行终端上玩家的连续变化的状态。我使用while循环不断更新玩家的健康状况(一个数字值),它通过一个小状态栏打印到屏幕上。它每秒循环多次,给游戏带来实时感。当程序运行时,我希望即使我与游戏交互,该值也能不断更新。例如,我希望在不中断我的小状态显示循环的情况下发出“吃东西”或“砍柴”之类的命令。我在设计此部件的功能时遇到问题。当我与游戏互动时,如何保持状态更新?我担心的是,当用户在终端中输入内容时,while循环被暂停,状态不再继续更新。我在寻找一些通用的指针,而不是实际的代码。我真的很感激。我对编程相当陌生,c++,multithreading,while-loop,nonblocking,pdcurses,C++,Multithreading,While Loop,Nonblocking,Pdcurses,我是否必须使用多个线程,或者当用户在屏幕上输入文本时,while循环是否有办法继续运行?谢谢你的指点。我希望这不是一个太令人困惑的问题 FWIW,这是我到目前为止的伪代码: #include //....some files.... int main() { // Initialize game objects and graphics bool programRunning = true; float playerEnergy = 3000.0; initscr(); /
#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;
}正如您所建议的,多线程是我在这里的方式
我发现使用
getch
可以解决您的问题,如果您使用:nodelay(stdscr,TRUE)进行非阻塞调用代码>但我自己没有使用过它,这取决于你在做什么,但我通常喜欢halfdelay()
——它让你拥有无阻塞输入,而不必将CPU固定在100%。或者,您可以使用nodelay()
并在适当的时候手动调用napms()
。谢谢!我在问这个问题之前搜索了一下,但显然错过了一个几乎问同样问题的问题。干杯