补充一下,在理解rep只是存储操作指令和单位状态后,我小时候还一直不清楚几率相关的东西是怎么存进rep的,比如攻击力在魔兽中是个范围而不像在星际中是个确定数值,剑圣/dh这刀是否暴击/被闪避,坡下打坡上是不是miss,直到我接触了伪随机数。直到现在和别人解释伪随机数时我都用星际魔兽rep里的暴击作为材料。
粘贴评论中的举例:
为简化,假设剑圣暴击率是10%,2倍暴击,而平砍伤害是10-20,剑圣砍了一刀,实际伤害30(15*2),第二刀坡下砍坡上,miss了。如果在rep中直接储存暴击30,第二刀miss也是可以的,但是这样显然要把剑圣一局游戏中的每一刀都要存下来,较为占用空间。而rep中采用的做法是,魔兽游戏中生成了一个伪随机数序列(这个序列在游戏中,不在rep里,但是rep可以调用。例如取0-1的均匀分布,比如0.753、0.500、0.988、0.132、0.781、0.646………均匀分布即为在0-1中取到这些数中的每一个概率是一致的),然后在rep中记录随机数种子(随机数开始的序列位置)。例如本rep种子为1,即从0.753开始。剑圣第一刀坡下砍坡上,命中率70%,可以等价于伪随机数值大于0.3即命中,而0.753大于0.3,故命中。下面实际攻击取10+(20-10)*随机数,此处为0.5,故攻击为15。下面计算暴击,和命中类似,随机数大于0.9即为暴击,此处为0.988,满足,故最终伤害为30。第二刀由于0.132小于0.3,故miss。作为rep,只需要存储剑圣的坐标、命令和种子数1,就能再现这两刀。此外其他游戏里的掉宝率也是这样的,例如暗黑。那个哥布林在你决定杀他的一刹那,他掉什么已经确定了,所以叫伪随机。
ps:我们打wow时说组了个黑手,这个CD就被他黑了,是有道理的。
关于更真实更复杂的实际情况,牵扯到概率的补偿,不会永远让你感到黑手没法玩(例如最近wow中好运币roll装备)。请参考评论中zy RSN的说明。
对于近战坡下砍坡上不会miss的问题,我搞错了,答题时也忽略了这个事实。那大家把例子想成DOTA里带水晶剑的远程英雄(不带金箍棒克敌机先)吧。
虽说有点走题,不过关于魔兽世界中的掉落问题,确实如评论中所说,是在第一个人进入副本时根据掉落表生成的。不过我想表达的意思没有变,随机的事物实际上往往是不那么随机的。至于掉落表怎么做,实际掉落生成方式怎么设计,这个水很深,超出了我认知范围,还是请专业的数值人员来回答吧。
— 完 —
本文作者:Shifty Guo
【知乎日报】
你都看到这啦,快来点我嘛 Σ(▼□▼メ)
此问题还有 33 个回答,查看全部。
延伸阅读:
只推荐一场魔兽争霸3录像,你会推荐哪场?为什么?
魔兽争霸职业选手 Space 是谁?