作者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