【问题标题】:Generate a Random number every 2 seconds? C++ Srand每2秒生成一个随机数? C++ 兰德
【发布时间】:2016-08-26 04:26:41
【问题描述】:

我正在学习 C++ 以制作游戏,我能够使用 srand 的函数每秒生成一个随机数。但我希望数字每 2 秒不同一次。

【问题讨论】:

标签: c++ random


【解决方案1】:

假设t 是以秒为单位的当前时间 (time(0))。很明显t每秒变化一次。然后t/2,因为四舍五入,每两秒变化一次。

【讨论】:

    【解决方案2】:

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

    clock() 放入无限的while 循环中,让时钟计数,这样当它达到两秒时,它会触发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。现在增量时间是

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-24
      • 2019-05-24
      • 2017-09-11
      • 1970-01-01
      相关资源
      最近更新 更多