我正在学习C ++以制作游戏,并且我能够使用srand的函数每秒生成一个随机数。但我希望这个数字每2秒钟就会变得不同了。
答案 0 :(得分:1)
说t
是以秒为单位的当前时间(time(0)
)。很明显t
每秒更改一次。然后t/2
因为四舍五入而每两秒更换一次。
答案 1 :(得分:1)
这是修复代码的简单方法。
将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()
,以供参考。
然后从刚刚获得的新时间中减去该时间并将其除以h
。 h
是CLOCKS_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;
}