作者wheels (踢...)
看板WarCraft
標題Re: [閒聊] 有沒有覺的AR自己玩到的總是那幾隻??
時間Tue Apr 15 15:39:07 2008
※ 引述《wei7613 (小噗)》之銘言:
: 如題
: 自己發現有些腳色很少自己AR到
因為我曾經有幸看到很久之前幾版觸發random的sorce code
來跟大家說一下
其實三國的random是公平的
只是需要想一下就是了
改編後的jass和c++混用版:
(將0~n設定為代表每個武將的編號)
set HeroType[每個武將編號] = 該武將;
int TempNumber;
for(int counter = 0; counter < n+1 ; counter++)
{
if( HeroTpye[counter] != 無部隊類型)
{
int RNumber = 隨機數字 between 0 ~ counter;
if(RNumber = 0)TempNumber = counter;
}
}
set HeroType[TempNumber] = 你ar到的武將;
再將這個HerpType清空就完成了
(有沒有人有興趣測一下time complexity?)
白話版:
讓一個暫存值一開始為0
重複n次以下動作:
每一次的動作時暫存值遞增
如果這個武將還沒被選走
就隨機選一個從0到暫存值的數字
若此隨機數字為0 就將該武將先"假定"為你選到的武將(若之前有就蓋過去)
等到重複的動作做完後最後"假定"的武將就是你ar到的武將
解說:
第一次動作時一定會選到0
那你就會"假定"選到0編號的武將
但是後面的重複機率選擇時有可能覆蓋過去
所以選到0編號武將的機率是1 x 1/2 x 2/3 x ... x n-1/n = 1/n
選到1編號武將的機率是1 x 1/2 x 2/3 x ... x n-1/n = 1/n
選到2編號武將的機率是1 x 1(有沒有選到都沒關係 會被覆蓋)
x 1/3 x 3/4 x ... x n-1/n = 1/n
選到n編號武將的機率是1 x 1 x ... x 1/n = 1/n
所以是公平的
--
code是自己打的沒關係吧= =a
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.244.179
1F:推 qwertz:原po是宅男 04/15 15:39
2F:推 Atermis:推專業 04/15 15:39
3F:推 SuperED:宅男+1 04/15 15:44
4F:推 tombear20:source? 04/15 15:49
5F:推 sitos:只要 "隨機數字" 本身不是不夠隨機,整個機制就爛了。 04/15 15:54
6F:推 kent550079:寫的好似乎最多只能趨近隨機吧 @@ 聽朋友說的 04/15 15:56
7F:推 e0928558056:這就講到組合了~C n選n 難怪我根本不懂 04/15 15:58
8F:推 zxooz:大喬*10次 一天玩一場 天天同一隻= = 04/15 16:01
9F:→ readper:根本是徹底的c++ XD 04/15 16:07
10F:推 bohun:這樣也宅男..不懂 04/15 16:10
11F:推 sammyice:推認真 Q_Q 04/15 16:18
12F:推 zxcv75320:好認真,不過看不懂,我還是覺得每隻的機率根本都不一樣 04/15 16:23
13F:→ zxcv75320:不會R到的就都沒R到過,可能我天生帶賽吧@@" 04/15 16:24
14F:推 gigilize:我的電腦只會r到阿蘇,符不,大牛,其他從來沒出現過 04/15 16:32
15F:推 wix3000:魔獸的隨機數本來就有問題 所以無論如何都不會太隨機XD 04/15 16:49
16F:推 KrGo:1 + rand() % n ... 04/15 16:57
17F:推 yeahhuman:就算不會太隨機 也不可能讓你玩起來覺得不隨機 04/15 16:56
18F:→ casual:專業 04/15 16:57
19F:→ readper:好像哪裡怪怪的? 04/15 17:00
20F:推 heprecsler:原PO,下禮拜一上機考唷>.^ 04/15 17:07
21F:推 qwertz:原po又帥又型 妹要圖找我A__A 04/15 17:08
22F:推 sunvictor7:原po很龜 04/15 17:12
23F:推 kkjjkkjj:推 04/15 17:14
24F:推 TKOW:隨機數字不夠隨機 時間複雜度 N 04/15 17:32
25F:推 asusleo:為什麼這樣叫宅>"< 04/15 17:36
26F:推 abccbaandy:"重點部分"竟然寫中文= = 04/15 17:45
27F:推 zcbmaa:看不懂= =不過我知道 我每次R到的角色都那幾隻...很少別的 04/15 17:53
28F:推 OoShiunoO:我猜每個人的電腦 存的東西都不一樣........ 04/15 17:57
29F:→ poga:random seed的問題,跟這有關係? 還可以m? 04/15 17:57
30F:→ OoShiunoO:所以每個人會固定ar到自己記憶空間專屬的某幾支 04/15 17:58
31F:推 yashingno:不要跟記者一樣啥都宅男 M型好嗎 04/15 18:01
32F:→ arroganc:很想噓.. 你根本沒有解答 而且迴圈是跑n+1次 04/15 18:01
33F:→ cssh:...這段code沒意義吧 04/15 18:05
34F:推 GiPaPa:一般來說random都會拿時間當seed 不知道魔獸是不是這樣罷了 04/15 18:05
35F:→ pureblue:我以前那幾篇都沒有m 哭哭 根本就不隨機啊..公式準也無用 04/15 18:05
36F:推 cp292864:武將是0~n的話不是就n+1個武將嗎?? 04/15 18:08
37F:→ cp292864:我是覺得應該還要設一個跑player的迴圈吧@@? 04/15 18:09
38F:推 OrzXXXqoo:專業 04/15 18:22
39F:→ readper:魔獸的random seed抓的time是game time 04/15 18:23
40F:→ readper:才能在網路遊戲時 保持參予電腦的同步性 04/15 18:24
41F:→ readper:會說War3的random不準也是這個原因 04/15 18:25
42F:→ readper:因為基本上你會按-ar的時間也不會有太多差別 04/15 18:26
43F:→ readper:lan每0.01秒一次封包 一秒內也只有100個不同的seed 04/15 18:26
44F:推 Wade9043:推專業樓上~ 04/15 18:36
來回一下
我po這篇只是想回答關於"人為"的部份
想表達的就只是"三國作者沒有來陰的"這樣而已
我根本就不知道WE random seed是從game time裡面抓的
就算知道了也不是寫WE的人可以解決的吧?
有些人似乎反應過度= =?
最後感謝readper大的解答^^"
※ 編輯: wheels 來自: 140.113.244.179 (04/15 19:18)
45F:推 ake2134cr9d:專業宅! 04/15 19:15
46F:→ cssh:那些推是反應給設m文之人看的 04/15 19:45
47F:→ evildark:推樓上.... 04/15 21:28
48F:推 ken771209:專業資工系果真不同@@" 04/15 21:44
49F:推 paxie:推,雖然懶的看XD 04/15 22:22
50F:→ evildark:只有不專業的人才會推專業... 04/15 22:24
51F:推 zxcv75320:那如此專業的你,是不是也要發表一下更專業的講解呢? 04/15 22:28
52F:→ evildark:你把那幾行co上去用用看就知道了 04/15 23:39
53F:推 H45:本 jass 很明顯打錯 herotype 04/15 23:50
54F:推 jeffccc:外行看熱鬧的真多 04/16 00:15
55F:推 hochiko:推熱心 光是肯提正面的想法出來供大家討論就值得推了.. 04/16 03:06
56F:→ hochiko:不懂為什麼有人要酸@@.. 04/16 03:09
57F:推 icycandle:只要 "隨機數字" 本身不是不夠隨機,整個機制就爛了。 04/16 05:44
58F:推 upo:靠背個屁啊~要說人家有語法錯誤~COMPILE不會過是不是 04/16 17:50
59F:→ upo:重點在於分享的心啦 04/16 17:51
60F:推 upo:說一堆搞的自己好像比較專業~省省吧 04/16 17:53
61F:推 lover26184:原PO是型男 04/16 22:52
62F:→ cssh:論點有問題的推證被m 會讓懂的人看了發噱 不懂的人產生謬思 04/19 03:46