2017-02-01 4 views
1

私はC++でスネークゲームを作ろうとしています。ヘビの動きを作っている間、私はヘビを1秒間その位置に凍結させてから、新しい位置を印刷します。 私はそのために次の関数作ら:C++で一定時間出力画面をフリーズ

void wait_time(int wait_t){ 
     time_t curr=time(NULL); 
     time_t nav_t=time(NULL); 
     while(1){ 
      if (nav_t-curr==wait_t) { 
       break; 
      } 
      else{ 
       nav_t=time(NULL); 
      } 
     } 
} 

をしかし、この関数が実行されている間、私の以前の出力が滞在していません。出力の一部が削除されます。すべての機能を制御し、この私の主な機能:

void run_game(){ 
    initial=time(NULL); 
    inital_parameter(); 
    gotoxy(0,2); 
    game_display(); 
    wait_time(1); 
    game_movement();location_disp(); 
    game_display(); 
    gotoxy(0,100); 
} 
+1

睡眠を実行すると、最後に覚醒するまで、睡眠を続け、入力を無視することを意味します。 – UKMonkey

答えて

2

11 C++であなたはしばらくの間、実行を一時停止する、std::this_thread::sleep_forを使用することができます。

#include <iostream> 
#include <chrono> 
#include <thread> 

int main() 
{ 
    // using namespace std::chrono_literals; // C++14 
    std::cout << "Hello waiter" << std::endl; 
    auto start = std::chrono::high_resolution_clock::now(); 
    std::this_thread::sleep_for(std::chrono::seconds(2)); // C++11 
    // std::this_thread::sleep_for(2s); // C++14 
    auto end = std::chrono::high_resolution_clock::now(); 
    std::chrono::duration<double, std::milli> elapsed = end-start; 
    std::cout << "Waited " << elapsed.count() << " ms\n"; 
} 
+0

申し訳ありませんが、それはC++ 14が必要です。私は答えを更新しました – Jonas

1

あなたの標準ライブラリを使用します:

std::this_thread::sleep_for(2s); 

2sがリテラルの時間ですが、あなたも

std::this_thread::sleep_for(std::chrono::seconds{2}); 
+1

クロノリテラルはC++ 14、C++ 11ではないことに注意してください – roalz

1
ような何かを行うことができます

リンクされたページには、以下の例が含まれます

最初の方法
chronoライブラリとstd::this_thread::sleep_for(your-time)

第二の方法マイクロ秒でwainingため別に待機しているため2機能
一つを持ってい

unistd.h

sleep(1);
または
usleep(1000000);

関連する問題