Пиша игра на c++, която използва pdcurses, за да получи информация от потребителя и да покаже постоянно променящото се състояние на играча на терминала на командния ред. Използвам цикъл 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;
}