Я пишу игру на С++, которая использует 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;
}