溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

在cocos2d-x中實(shí)現(xiàn)真隨機(jī)數(shù)

發(fā)布時間:2020-05-27 12:28:20 來源:網(wǎng)絡(luò) 閱讀:1914 作者:嗚拉呆 欄目:游戲開發(fā)

今天在項(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;



向AI問一下細(xì)節(jié)

免責(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)容。

AI