cocos2dx裡真正的隨機函數

來源:互聯網
上載者:User

最近在做一個回合制遊戲,要實現暴擊閃避的判斷,這就要一個隨機數進行判斷比較了。

之前一直在用srand((int)time(0)); rand();的組合,但是這個是以秒為單位的,同秒之內。。基本沒區別,畢竟我回合制裡邊,法師一個aoe,肯定要一個迴圈瞬間判斷給予每個敵人(多個物件同時調用rand())的傷害,就是機器再爛。。也不會超過1秒這麼大的延遲吧。。就一直要麼全閃避,要麼全暴擊,雖然不是次次這樣,但是超過80%是這種雷同情況,讓人蛋疼而憂傷。 - -||


所以查資料發現了GetTickCount();這個函數 ,是微妙級的,可用於隨機種子srand(GetTickCount());但依然各種雷同,N胞胎,蛋疼而憂傷。。 - -||

很多人都說c/c++裡沒有真正的隨機,除非量子電腦,也就是硬體支援才行。看來只能靠手法解決了。所以試了試,種子裡邊再加個隨機rand(),哇塞~居然成功了~^_^


終極形式,就是用這個作為種子:srand(GetTickCount()+ rand());

經驗證,ok的,瞬間多少次,不同對象同時rand(),都結果不同,哇哈哈,當然種子後邊這個rand()的要根據需求2次處理,大家隨意,重點是這個隨機種子的處理。


可惜的是GetTickCount()屬於win,打包apk的時候會報錯,經測試,簡單點的方法是種子函數改為: srand(int(time(0))+ rand());

複雜點的就是利用linux裡的clock_gettime函數重新實現一下,代碼如下

// 返回自系統開機以來的毫秒數(tick)unsigned long GetTickCount(){    struct timespec ts;    clock_gettime(CLOCK_MONOTONIC, &ts);    return (ts.tv_sec * 1000 + ts.tv_nsec / 1000000);}int main(){    struct timespec time1 = { 0, 0 };    clock_gettime(CLOCK_REALTIME, &time1);    printf("CLOCK_REALTIME: %d, %d\n", time1.tv_sec, time1.tv_nsec);    clock_gettime(CLOCK_MONOTONIC, &time1);    printf("CLOCK_MONOTONIC: %d, %d\n", time1.tv_sec, time1.tv_nsec);    clock_gettime(CLOCK_MONOTONIC_RAW, &time1);    printf("CLOCK_MONOTONIC_RAW: %d, %d\n", time1.tv_sec, time1.tv_nsec);    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);    printf("CLOCK_PROCESS_CPUTIME_ID: %d, %d\n", time1.tv_sec,           time1.tv_nsec);    clock_gettime(CLOCK_THREAD_CPUTIME_ID, &time1);    printf("CLOCK_THREAD_CPUTIME_ID: %d, %d\n", time1.tv_sec,           time1.tv_nsec);    printf("\n%d\n", time(NULL));    printf("tick count in ms: %ul\n", GetTickCount());    return 0;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.