您好,登錄后才能下訂單哦!
今天在項(xiàng)目中用到了隨機(jī)數(shù),但發(fā)現(xiàn)cocos2d-x中宏CCRANDOM_0_1提供的都是非常有規(guī)律的隨機(jī)數(shù),后來上網(wǎng)查資料的值,產(chǎn)生隨機(jī)數(shù)的函數(shù)rand需要一個“種子”,默認(rèn)情況下,該種子的值是不變的,因此每次程序運(yùn)行,我們都會看到,它所產(chǎn)生的一組隨機(jī)數(shù)都是和上次的一樣的,那么為了能夠產(chǎn)生真隨機(jī)數(shù),我們就必須來動態(tài)的修改該種子的值,該過程可通過srand(unsigned int speed)函數(shù)實(shí)現(xiàn),具體實(shí)現(xiàn)過程如下:
這里直接把它寫成一個函數(shù)方便調(diào)用
static float myRand_0_1()
{
cc_timeval psv;
CCTime::gettimeofdayCocos2d( &psv, NULL ); // 獲取本地時間
//根據(jù)時間產(chǎn)生隨機(jī)種子
//(這里加上一個rand函數(shù),可解決在循環(huán)內(nèi)(時間間隔極短)取隨機(jī)數(shù)時,
//連續(xù)取得的幾個值相同的問題)
unsigned int tsrans = psv.tv_sec * 1000 + psv.tv_usec / 1000 + rand();
srand(tsrans); //設(shè)定隨機(jī)數(shù)種子
return CCRANDOM_0_1();
}
這里補(bǔ)充一點(diǎn):
c語言里函數(shù)rand()和srand()的用法:
rand(void)用于產(chǎn)生一個偽隨機(jī)unsigned int 整數(shù)。
srand(seed)用于給rand()函數(shù)設(shè)定種子。
srand 和 rand 應(yīng)該組和使用。一般來說,srand 是對 rand 進(jìn)行設(shè)置。比如:
srand((UINT)GetCurrentTime());
int x = rand() % 100;
是生成 0 到 100 之間的隨機(jī)數(shù)。
srand()是用來初始化隨機(jī)種子數(shù)的,因?yàn)閞and的內(nèi)部實(shí)現(xiàn)是用線性同余法做的,他不是真
的隨機(jī)數(shù),只不過是因?yàn)槠渲芷谔貏e長,所以有一定的范圍里可看成是隨機(jī)的,式子如下:
rand = rand*const_1 + c_var;
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。