2024122108:09星期六申请收录标签云 工具箱
当前位置:首页新闻聚焦详情页

英雄无敌3走进科学:无处不在无所不能的战场随机事件

新闻聚焦admin2024-10-0567

定义

随机事件:主要是指游戏中有概率发生的事件,例如士气大振,士气低落,幸运一击,蛮牛发动死神之眼,蜥蜴发动石化效果等等。


现象

英雄无敌3的随机事件算法,经过多个版本的反复优化,有这么几个现象可以观察到。(小辉使用的是英雄无敌3死亡阴影高清重制版)

一、随机事件的出现次序,具有固定性。

在某次战斗中,不能简单的重打来改变随机事件。

最常见的,如果不做任何改变,反复重打,你会发现始终结果是一样的。甚至部队的攻击上限下限都一样,差别基本只有1,2点伤害!!!

也就是说,必须做点别的什么事,比如战斗中释放魔法,比如进战斗前访问神庙增加士气,才能改变随机的结果。

注意:实战观察到,圣龙的恐惧不遵循这个固定性规律。不改变任何条件,反复重打,圣龙的恐惧的对象有可能发生变化。

二、大数量下,随机事件的概率统计值,具有稳定性。

在很多次的战斗模拟中,你可以精确的发现随机事件的概率保持非常非常稳定的次数。

举个例子:

用2个防御特长的英雄(孟斐拉和泰泽),级别修改到200级。(这样,在测试中,所带部队的攻击都互相只能造成1点伤害。)

孟斐拉带25只巨蜥(20%概率石化,总生命1000),泰泽分别带1000生命的部队(100个戟兵,10个骑士、4个大天使、50个战斗矮人)

这样双方都是1000生命,一回合内,我方攻击1次,导致对方损失生命1,对方反击,导致我方损失生命1;然后对方攻击1次,导致我方损失生命1,我方反击,导致对方损失生命1。

也就是说,一回合内,双方各掉2点血,攻击2次。(即使对方被石化,敌方也掉血了,敌方的被攻击次数是没影响的)

因此最后统计我方石化出现次数,除以1000(因为敌人一共就1000次被攻击次数),就可以计算出来石化的概率了。

从修正结果上看,英雄无敌3的随机事件的宏观概率表现非常稳定。

三、大数量下,有可能有多次小概率事件连续出现。

虽然整体数据上石化的随机事件概率很稳定,但是在实际测试过程中,巨蜥连续3次出石化是常有的事,连续5次石化的极端情况也出现过;反过来,连续20几次不石化也非常常见。

这说明英雄无敌3的随机事件算法,还是比较接近真实随机事件。

由于每次石化发生都是独立计算概率的事件,只要是真实随机事件,就必然有这样的表现。

顺手提一下,手游中为了加强玩家的体验,往往会设置类似100抽必中ssr之类的设定,这就意味着抽卡并不是真实随机事件,被强行写入算法干预了。


原理

真实游戏里的随机事件算法,我们只有反编译才能看清楚,但是我们根据上面3个现象,已经可以推算出来大概的情形了。

1、在进入战斗的瞬间,程序随机生成了一长串随机数列。

英雄无敌3的电脑程序生成了针对本次战斗大概100个数字的随机数列(这个100的值不重要,随口说说,战斗中如果不够用就继续生成),每个数字在1-1000之间(这个值不重要,猜测,不过应该差不多),对于每个动作发生的时候,都按次序调用下一个随机值。

例如:进入战斗的时候,生成了800,700,200,914这样的随机数序列。

第一步我方部队移动,调用了800这个随机数,但是移动这个动作,不会造成任何随机效果,因此800这个数值调用了,但没产生作用。

第二步我方部队移动后攻击了敌人,轮到调用700这个随机数,那么根据攻防公式,计算攻击伤害计算完上限是100和下限是50后,50+(100-50)乘以700除以1000=85,也就是这次伤害打出了85点伤害,伤害上限是100,伤害下限是50。

第三步敌人反击,轮到调用200这个随机数。据攻防公式,计算反击伤害计算完上限是40和下限是30后,30+(40-30)*200除以1000=32

第四步我方部队部队士气2,行动后,有8.3%的机会2次移动。轮到调用914这个随机数,那么计算914是否落到1-1000区间的8.5%区间内,没落到。(如果落到应该是在915到1000以内的数字才行算落入8.5%的区间),那么不触发2次行动,结束。

大概就是这么一个工作机制,所以,可以观察到,如果什么都不改变,反复进入战斗,战斗过程中的随机事件触发,会一直是重复。

2、那些因素可以影响到进入战斗生成的随机数列。

战斗发生点的地图坐标,敌我双方的部队情况(分队、混编、站位、生命,数量、士气、运气等等),应该还有其他条件,但现象太少推测不出来了。

3、随机数列并不是永远一成不变,每次进入战斗依然存在随机浮动。

如果不改变任何条件,反复进入同一次战斗,随机数列有可能轻微变化,但不会变化太大,所以你会观察到每次部队的互相攻击的伤害变化都不大。。。运气好偶尔比如出现刚才的第四步,之前一直是随机数是914,偶尔有一次重新进入战斗,这个数值轻微变化到了915,就刚好触发了士气,一旦触发了士气,就意味着随机数的后面的调用次序发生了变化,那么后续战斗都将发生变化,也就是这次战斗结果很可能发生了巨大改变。

相关文章