找回密码
 点一下
查看: 8641|回复: 35

理论派→第二谈★随机值★

[复制链接]
发表于 2008-5-2 20:06:45 | 显示全部楼层 |阅读模式
前面的帖子里既然讨论到随机值问题
我就把着文章贴过来吧

                                                魔兽攻击力随机值分析  
大家都知道,war3里面攻击力是有范围的,DH的闪避、BM的暴击等都是有概率的。所以在war3里,随时随地都是有随机事件发生的。但大家可能没注意过,攻击力的随机值是怎样产生的呢?是全范围内的等概率事件,还是如二项式曲线一样中间概率高、两边概率低?

  正确的答案是:中间的数值概率高,两边的概率低。至于具体的分布概率,请看下面详解。

  大家应该都看过魔兽的中文帮助,细心的朋友可能发现了,有些版本的帮助中,对攻击力的数值的表述不是一个由下限到上限的具体数字范围,而是用的类似这样一个式子:
  A+BdC(其中ABC均为自然数)
  比如0攻rm吧,用前一种表述方法就是18-24,而用后一种表述方法则为:16+2d4。有人可能会问了,这种表述方法是什么意思呢?

  这其实表示,war3中攻击力的概率分布使用的是d&d色子系统。通俗一点的理解就是:任何兵种都是有一个基础攻击力数值A(比如rm就是16),B则代表色子数量(比如rm就是2),C则代表色子的面数(比如rm就是4,这里不一定是6啊,war3不是搓麻)。rm每攻击一次,系统就扔出两个4面的色子(色子扔出1-4的概率是相同的),假如扔出来的数值是2、4,那么这一次攻击的数值就是16+2+4=22。当然啦,当扔出的都是1时,就是最小值18,当都是4时,就是最大值24。

  现在来研究一下攻击力分布概率的问题。继续拿0攻的rm举例,其他的兵种道理是一样的。
  18(24):一种可能性1/101+1(4+4)
  19(23):两种可能性2/101+2、2+1(3+4、4+3)
  20(22):三种可能性3/101+3、2+2、3+1(2+4、3+3、4+2)
  21:四种可能性4/101+4、2+3、3+2、4+1
  可以看出来,越居中的数值随机出来的可能性越高,而两边的数值概率是对称的,越远概率越低。也许可能有人要问了,那rm18-24的攻击力为什么不能表示为17+1d7或者15+3d3呢?这两个式子也代表了18-24这个攻击范围啊?这是一个好问题,如果各位war3er看到这里能提出这个问题的话,说明你是个善于动脑、善于思考的人。

  答案是这样的,大家想一下,war3对攻击力的升级是怎么实现的呢?很简单,就是加一个色子。再拿rm举例,1攻的rm攻击力是19-28,用先前的表示法就是16+3d4。而如果是17+1d7或者15+3d3的话升一攻加一个色子后变成17+2d7或者15+4d3,这分别对应于19-31、19-27,这与事实是不符的。同理,2攻3攻的rm的攻击力分别为16+4d4(20-32)、16+5d4(21-36)。

  现在大家再看一下这个式子:A+BdC,升1、2、3级攻后B分别为B+1、B+2、B+3。
可以看出,A越大、B越小、C越大,那么升级攻后对攻击力的提升更加显著。下面列表看一下各族各个兵种的攻击力数值(召唤生物、法师没有列出,因为他们不能升级攻防,于本文没有讨论意义):

HUM:      ORC:      NE:      UD:   
民兵:11+1d2  大G:17+1d4  ac:15+1d3   小g:10+2d2
fm:11+1d2   猎头:22+1d5  ht:15+1d3    zz:25+1d6
rm:16+2d4  粉碎者:71+1d18 投刃车:35+1d18  天g:17+1d4
74:25+2d5  狼骑:22+1d5  小鹿:16+1d3   骷髅:13+1d2
破法:12+1d3  飞龙:34+2d5  doc:18+1d4   绞肉车:70+1d18
飞机:6+1d2  蝙蝠:12+1d3  熊形态:26+3d6   abo:32+1d7
  13+1d2   牛头:29+1d7  角鹰:49+1d8   des:18+1d3
小炮:51+1d13          角鹰骑:15+1d3  冰龙:91+2d12
坦克:44+1d11          精灵龙:13+1d3
  12+1d2           奇美拉:66+1d17
49:44+1d11               44+1d11
61:17+1d3           山岭:26+2d7
                   32+2d8
                 dot鸟:34+1d7

  可以看出,初级兵里zz的A、C值最高,而49、奇美拉、小炮、三种CAT都符合A大、B小、C大的原则,也就是说,对于他们升攻对攻击力的提高是显著的。还有一个不得不提的就是熊,它是唯一B值为3的,而C值也只有6,升攻对它并不显著,只是因为B值较大,攻击力范围很大而已。而C值小于4的(比如des、61),升攻对它们是没什么太大作用的。还有要强调的一点就是:对于B=1的兵种来说,升攻前因为只有一颗色子,所以它们的攻击力概率分布是均匀的,当B〉1后就符合前文所说的中间概率高,两边概率低的规律了。

  
  我们都知道,rep记录的是时间序列,即什么时间什么坐标的单位,以什么样的命令,指向目标坐标;而对于这个动作所造成的结果,是在播放rep时实时演算的。比如,坐标(1,1)的fm,以动作指令“A”,指向坐标(3,3)的DH;而对于这次攻击实际造成的伤害,rep里是不会、也没有必要、甚至是不能记录的。于是问题就产生了,由于随机系统的存在,每一次动作指令造成的结果是不定的,fm可能给dh造成8点伤害,也可能被dh闪避掉,怎么才能保证播放rep时真实的重现当时的情况呢?

  一种解释是:对于每一个动作,rep都记录下对应于它的随机数。但这显然是不合理的,因为其数据量过于庞大了,要知道一次攻击通常都会产生不止一个随机数。

  学过basic的可能都知道,对于随机函数randonmize如果不指定随机种子的话,其产生的随机数列是不会改变的,也就是说不同的随机种子对应于不同的随机数列。依据这个原理,我认为是这样的,一次游戏开始前,war3先随机产生一个随机种子,而这个种子和随机数列之间是唯一对应的,当一个随机事件产生的时候,系统就按照先后顺序分配事前已产生好的随机数。rep也只须记录这个随机种子,当播放rep的时候,系统根据记录的随机种子重新产生出这个随机数列,由于时间顺序是确定的,所以一个随机事件对应的随机数也是确定的,这样就可以真实的重现当时的情况,而且也可以大大的缩小数据量。


以上观点证实了魔兽连机机制     
我想补充的是  所谓的随机  其实也是按特定的算法进行的
而且几率是固定的    随机种子导致的运算结果   就是二项式曲线
出现爆机   就是在曲线交际的时候
因为基数大小   所以几率并不是相同  也是必然相同的

评分

参与人数 1威望 +33 收起 理由
kook + 33 finally i found it..

查看全部评分

 楼主| 发表于 2008-5-2 20:16:26 | 显示全部楼层
很明显  。。又是有人看  没人回。。
贴子。。即将沉↓
回复

使用道具 举报

发表于 2008-5-2 20:25:04 | 显示全部楼层
很明显。。。长篇大论真的是没人赏脸。。。。
回复

使用道具 举报

发表于 2008-5-2 20:39:43 | 显示全部楼层
攻击实际造成的伤害是不能记录的
有根据吗

回复

使用道具 举报

 楼主| 发表于 2008-5-2 20:48:11 | 显示全部楼层
建议你去看本人的前面一篇
联机机制
魔兽能记录和传递的东西   只有操作
操作相符合
就会有修改   
实际伤害关联到很多因素   
有时 会有延迟  所以 算持续性的比较好(不是每秒伤害的那种)
所以没有所谓的实际攻击
既然没有  怎么记录?
回复

使用道具 举报

发表于 2008-5-2 20:57:16 | 显示全部楼层
所有内核支持replay的游戏都是记录seed的...
回复

使用道具 举报

发表于 2008-5-2 21:04:33 | 显示全部楼层
引用第5楼白银の式神于2008-05-02 20:57发表的  :
所有内核支持replay的游戏都是记录seed的...
回复

使用道具 举报

 楼主| 发表于 2008-5-2 21:17:37 | 显示全部楼层
5楼明显比我了解核心引擎。。。
回复

使用道具 举报

发表于 2008-5-3 00:59:09 | 显示全部楼层
你才知道啊
回复

使用道具 举报

发表于 2008-5-3 01:03:58 | 显示全部楼层
此文非常眼熟。。。难道在RN看到过?
回复

使用道具 举报

发表于 2008-5-3 01:12:23 | 显示全部楼层
楼主发这个东西之前有人讨论过了

这也还罢了
楼主居然用那么长的文字来吓人

这也还罢了
楼主的排版让人望而生畏

这也还罢了
先说内容再说总结 对用户的友好度太低 应该反过来

这也还罢了
转帖的帖子 不应该指望啥
回复

使用道具 举报

发表于 2008-5-3 08:49:24 | 显示全部楼层
没啥可看性 没看出有什么新东西在里面
期待楼主下一篇理论
回复

使用道具 举报

发表于 2008-5-3 10:17:31 | 显示全部楼层
楼主不过是转了个帖子然后写上自己的看法,而且前在注明转帖,只不过不知道引用功能~某楼不要无意识的批判~
回复

使用道具 举报

发表于 2008-5-3 10:33:43 | 显示全部楼层
顺便发现个很烂的结论-骰子面小升级攻击力就不显著……
回复

使用道具 举报

 楼主| 发表于 2008-5-3 19:34:18 | 显示全部楼层
其实骰子面的设定   就是对应了内码中的某算法
只不过不是表上看的那么简单......
回复

使用道具 举报

发表于 2008-6-12 14:09:15 | 显示全部楼层
先问一下,能否实现真正的随机值呢?

这个对我的图来说,很重要
回复

使用道具 举报

 楼主| 发表于 2008-6-12 14:47:46 | 显示全部楼层
额。。。。。。这算挖坟么。。。。。。

只要做了算法  那么就是随机的
那么 我们写的随机值 为伪随机
内部算法为真随机
真正的随机发生率=伪随机+真随机(并不是加法)
内部算法看成定值    伪随机看为变值
那么最后的结果就是变值
所以随机还是随机,只不过实际上是固定发生率的
计算机内没有随机数 这么一说的
不过魔兽里我们不考虑这些    我们也不能改变这些
回复

使用道具 举报

发表于 2008-6-12 14:50:17 | 显示全部楼层
不算挖坟吧??KOOK的规定是2个月吧?

我想知道微软的随机函数是怎么做的……~~

谁能说下?
回复

使用道具 举报

 楼主| 发表于 2008-6-12 14:51:52 | 显示全部楼层
微软的随机函数?具体点。。。。
回复

使用道具 举报

发表于 2008-6-12 14:58:21 | 显示全部楼层
额 就用C#的Random函数来说吧 记得是实现0.00~1.00的实数随机数吧?

那微软实现这个随机函数的计算公式是什么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-5-2 14:20 , Processed in 0.329615 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表