魔兽攻击力随机值分析

2007-09-21 12:29:16 神评论

17173 新闻导语

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

大家都知道,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/10——1+1(4+4)
  19(23):两种可能性2/10——1+2、2+1(3+4、4+3)
  20(22):三种可能性3/10——1+3、2+2、3+1(2+4、3+3、4+2)
  21:四种可能性4/10——1+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   胖子: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
龙鹰: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、龙鹰),升攻对它们是没什么太大作用的。还有要强调的一点就是:对于B=1的兵种来说,升攻前因为只有一颗色子,所以它们的攻击力概率分布是均匀的,当B〉1后就符合前文所说的中间概率高,两边概率低的规律了。

  下面的内容,是有关war3本身程序原理的,而且我本人也正在探索中,所以不关心的朋友,以下的可以跳过去不看。

  我们都知道,rep记录的是时间序列,即什么时间什么坐标的单位,以什么样的命令,指向目标坐标;而对于这个动作所造成的结果,是在播放rep时实时演算的。比如,坐标(1,1)的fm,以动作指令“A”,指向坐标(3,3)的DH;而对于这次攻击实际造成的伤害,rep里是不会、也没有必要、甚至是不能记录的。于是问题就产生了,由于随机系统的存在,每一次动作指令造成的结果是不定的,fm可能给dh造成8点伤害,也可能被dh闪避掉,怎么才能保证播放rep时真实的重现当时的情况呢?
  一种解释是:对于每一个动作,rep都记录下对应于它的随机数。但这显然是不合理的,因为其数据量过于庞大了,要知道一次攻击通常都会产生不止一个随机数。
  学过basic的可能都知道,对于随机函数randonmize如果不指定随机种子的话,其产生的随机数列是不会改变的,也就是说不同的随机种子对应于不同的随机数列。依据这个原理,我认为是这样的,一次游戏开始前,war3先随机产生一个随机种子,而这个种子和随机数列之间是唯一对应的,当一个随机事件产生的时候,系统就按照先后顺序分配事前已产生好的随机数。rep也只须记录这个随机种子,当播放rep的时候,系统根据记录的随机种子重新产生出这个随机数列,由于时间顺序是确定的,所以一个随机事件对应的随机数也是确定的,这样就可以真实的重现当时的情况,而且也可以大大的缩小数据量。
 
【编辑:左side拉杆横排两颗星】
版本专题
今日头条
精华推荐
日期
游戏
状态
下载
礼包

页游测试表

日期
游戏
状态
评分
礼包