2

pdcursesを使用する C++ でゲームを書いています。ユーザーからの入力を取得し、コマンドライン端末でプレイヤーの継続的に変化するステータスを表示します。while ループを使用して、プレーヤーの健康状態 (数値) を継続的に更新します。これは小さなステータス バーと共に画面に表示されます。1 秒間に複数回ループするため、ゲームにリアルタイム感が生まれます。プログラムの実行中は、ゲームを操作しているにもかかわらず、この値が継続的に更新されるようにしたいと考えています。たとえば、小さなステータス表示ループを中断することなく、「食べ物を食べる」や「木を切る」などのコマンドを発行したいと考えています。この部分の機能を設計するのに問題があります。ゲームの操作中にステータスを更新し続けるにはどうすればよいですか? ユーザーが端末に何かを入力している間に、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

1

何をしているかにもよりますが、私は通常halfdelay()、CPU を 100% に固定することなくノンブロッキング入力を使用できるようにすることを好みます。または、必要に応じて を使用nodelay()して手動で呼び出すこともできnapms()ます。

于 2015-10-15T18:02:59.703 に答える