每2秒生成一个随机数? C ++ Srand

时间:2016-08-26 04:26:42

标签: c++ random

我正在学习C ++以制作游戏,并且我能够使用srand的函数每秒生成一个随机数。但我希望这个数字每2秒钟就会变得不同了。

2 个答案:

答案 0 :(得分:1)

t是以秒为单位的当前时间(time(0))。很明显t每秒更改一次。然后t/2因为四舍五入而每两秒更换一次。

答案 1 :(得分:1)

enter image description here

这是修复代码的简单方法。

clock()置于无限while循环中并让时钟计数,以便当它达到2秒时,它会触发rand()以生成新的随机数。重置clock()。无限重复。

现在数学背后:

如您所知,增量时间是最终时间,减去原始时间。

dt = t - t0

此增量时间只是在while循环中经过的时间量。

a 函数的导数表示函数相对于其变量之一的无穷小变化。我们的deltaTime

函数相对于变量的导数定义为http://mathworld.wolfram.com/Derivative.html

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

首先,你得到一个时间, TimeZero = clock(),以供参考。

然后从刚刚获得的新时间中减去该时间并将其除以hhCLOCKS_PER_SEC。现在delta时间是

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

deltaTime > secondsToDelay时,您会生成一个新的随机数。

将所有内容放入代码中会产生以下结果:

#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;
}