電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
亂數C++

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念
上一篇主題 :: 下一篇主題  
發表人 內容
satanupup
喜歡上這裡的冒險者


註冊時間: 2007-05-29
文章: 80

68.10 果凍幣

發表發表於: 2009-3-25, AM 1:22 星期三    文章主題: 亂數C++ 引言回覆

需include stdlib.h
數值=rand();

例:
取1-10的亂數 a=(rand()%10)+1;
取1-100的亂數 a=(rand()%100)+1;
取100-1000的亂數 a=(rand()%901)+100;

由上幾例可以歸納出來
要取 a~b 的亂數可以這麼寫:
(rand()%(b-a+1))+a

如果單用 rand 取亂數會發現取多次後會出現相同的亂數
這個時候就可以用其他技巧來幫忙

利用 srand() (定義在 stdlib.h)

用 srand 取亂數需要一個參數作為種子以產生新的亂數序列
而這個參數通常使用目前的時間傳入,這時候就需要用 time() (include <time.h>)
來幫忙。

利用 srand() (定義在 stdlib.h)

用 srand 取亂數需要一個參數作為種子以產生新的亂數序列
而這個參數通常使用目前的時間傳入,這時候就需要用 time() (include <time.h>)
來幫忙。

使用方法
在使用 rand 的前一行加上
srand(time(NULL));

ex:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void main()
{
int a;
srand(time(NULL));
a=(rand()%100)+1;
printf("The Random Number is %d .n", a);
}
回頂端
檢視會員個人資料 發送私人訊息
babu61509
散播福音的祭司


註冊時間: 2007-08-26
文章: 142

681.01 果凍幣

發表發表於: 2009-4-27, AM 10:40 星期一    文章主題: 引言回覆

稍微補充一下下 :
引言回覆:

要取 a~b 的亂數可以這麼寫:
(rand()%(b-a+1))+a


稍微再改成 (rand()%(c))+a

因為rand()會隨機傳回一個數值,而%是求它的餘數,以上面公式為例,任何數去求c的餘數出來的值必定"小於"c,然後再加上a,出來值的範圍就是 a ~ b 了。
也就是說,rand()%(c)這段是求 0 ~ (c-1) 的亂數,後面的a就是把這段亂數位移。

ex :
1.
rand() = 951563 a = 10 b = 100 c = 100 - 10 + 1 = 91

(rand()%(b-a+1))+a = (951563%(91))+10 = 67 + 10 = 77

2.
rand() = 480246 a = 1 b = 50 c = 50 - 1 + 1 = 50

(rand()%(b-a+1))+a = (480246%(50))+1 = 46 + 1 = 47

_________________
已經畢業了!!
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式初級班:語法及基礎概念 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作