2016-08-26 1 views
0

Ich studiere C++, um ein Spiel zu machen und ich konnte jede Sekunde eine Zufallszahl mit den Funktionen von srand erzeugen. Aber ich wollte, dass die Nummer alle 2 Sekunden anders ist.Generieren Sie alle 2 Sekunden eine Zufallszahl? C++ Srand

+3

nicht 'rand' Verwenden Sie,' srand' und 'Time'. Es gibt bessere Alternativen: http://en.cppreference.com/w/cpp/header/chrono, http://en.cppreference.com/w/cpp/numeric/random, http://en.cppreference.com/w/cpp/header/zufällig –

Antwort

1

Sagen Sie t ist die aktuelle Zeit in Sekunden (time(0)). Es ist offensichtlich, dass sich t einmal pro Sekunde ändert. Dann ändert sich t/2 wegen der Rundung alle zwei Sekunden.

1

enter image description here

Hier ist eine einfache Möglichkeit, den Code zu beheben.

ein clock() in einer unendlichen Schleife while Setzen und die Taktzählung lassen, so dass, wenn sie zwei Sekunden erreicht, es rand() löst eine neue Zufallszahl zu erzeugen. Setzen Sie die clock() zurück. Wiederhole unendlich.

Nun ist die Mathematik hinter:

Wie Sie bereits wissen, ist Delta-Zeit das letzte Mal, abzüglich der ursprünglichen Zeit.

dt = t - t0 

Diese Delta-Zeit, ist aber einfach die Menge an Zeit, während im while Schleife durchläuft.

Die Ableitung von eine Funktion stellt eine infinitesimale Änderung in der Funktion in Bezug auf eine seiner Variablen. Unser deltaTime.

Die Ableitung einer Funktion in Bezug auf die Variable ist definiert als http://mathworld.wolfram.com/Derivative.html

   f(x + h) - f(x) 
f'(x) = lim ----------------- 
     h->0   h 

Zuerst eine Zeit erhalten, d.hTimeZero = clock(), Referenz.

Dann subtrahieren Sie diese Zeit von einer neuen Zeit, die Sie gerade erhalten haben, und teilen Sie sie durch h. h ist CLOCKS_PER_SEC. Jetzt Delta-Zeit ist

deltaTime = (clock() - TimeZero)/CLOCKS_PER_SEC; 

Und wenn deltaTime > secondsToDelay, Sie erzeugen eine neue Zufallszahl.

Putting, dass alle in den Code ergibt dies:

#include <cstdlib> 
#include <ctime> 
#include <iostream> 
using namespace std; 

int main(int argc, char *argv[]){ 
    cout << "Generate a new random number every 2 seconds \n\n"; 

    // create a clock and start timer 
    clock_t TimeZero = clock(); //Start timer 

    double deltaTime = 0; 
    double secondsToDelay = 2; 
    bool exit = false; 

    // generate random seed using time 
    srand(time(0)); 

    while(!exit) { 

     // get delta time in seconds 
     deltaTime = (clock() - TimeZero)/CLOCKS_PER_SEC; 
     cout << "\b" << secondsToDelay - deltaTime << "\b"; 

     // compare if delta time is 2 or more seconds 
     if(deltaTime > secondsToDelay){ 
      cout << "      "; 

      // generate new random number 
      int i = rand() % 100 + 1; 
      cout << "\nNew random : " << i << "   \n"; 

      //reset the clock timers 
      deltaTime = clock(); 
      TimeZero = clock(); 
     } 
     } 

    return 0; 
} 
Verwandte Themen