正在加载
席德梅尔之文明4 战斗系统深入分析
时间:2023-01-10 来源:本站 作者:佚名
电脑大家应该不怎么陌生吧!现在电脑已经普及到大多数人的家庭之中了,电脑的用途非常地广,不同年龄段、不同行业的人对电脑的用处不同。但是对于很多的年轻人来说电脑最大的用途就是玩游戏了。电脑游戏大家肯定玩过吧!它可以使人上瘾。

概述

战斗其实就是两个数值之间的较量,攻击方的力量A和防守方的力量D。这两个数值

受到各种情况的修正,比如树林给予50%额外的防御加成,将会修正防守方的力量D。

一旦修正后的A和D被用来计算胜率,以下的公式将对双方都生效,不管谁是进攻方

,谁是防守方。

每个单位开始战斗时都有100点HP,并且在战斗后损失一定量的HP。一旦HP在战斗中

降至0,这个单位就会死亡。如果一个力量3的弓箭手在战斗中损失了40点HP,战斗结束

后他的力量会降至3*(1-0.4)=1.8。如果这个弓箭手开始战斗时只有2.5的力量,他还是

有100点HP,如果这次也损失了40点HP,战斗结束后他的力量会降至2.5*(1-0.4)=1.5。

战斗是一轮一轮进行的,每一轮都会掷一次骰子,由A和D决定谁赢得这一轮。输掉

的一方将会失去部分HP。之后进行下一轮的战斗。一旦某一方的HP降至0或负数,战斗结

束并且这个单位被消灭。

先攻给予一个“自由”轮。这意味如果某一方有两次先攻,这两轮仍然如同原先一

样战斗,但是如果先攻方输掉了这轮他不会受伤,而赢了他可以对对方正常造成伤害。

撤退对于胜率没有影响,它只发生在进攻方将要死亡的一轮。

如果一个单位有5-7的先攻,那么它究竟有几次先攻?

(这一段原文比较繁琐,我翻译得简单一点)

每个单位实际上有两个相关的参数:确定先攻和先攻机会。

先攻=确定先攻+先攻机会

所以5-7的先攻就是在每次战斗中选取一个5-7之间的随机数作为先攻次数。

一旦战斗开始,第一个要检查的是对方是否拥有免疫先攻能力,如果没有,先攻正

常运作。

接下来要检查对方是否也拥有先攻,如果也有的话,两者先攻的差将会在战斗计算

被应用。比如一个6次先攻的部队面对一个2次先攻的部队,相当于前者拥有4次先攻。

基本公式

修正值

攻击方和防守方会从一些升级(比如1级战斗+10%力量)和位置(比如树林给防守方

50%防御加值)得到奖励。这些加到单位的基本数值上,基本数值是指受伤时的力量(如

果单位受伤的话)。一旦修正后的力量计算出来后,我们把攻击方数值叫做A,防守方叫

做D,之后计算伤害时就只需要这两个数值了。

举个例子,一个受伤的2.5力量的弓箭手有一级战斗(+10%),并且在树林中防守(

+50%),那么D=2.5*(1+10%+50%)=2.5*1.6=4

回合

决定每一轮成功的机会只是掷一个骰子。攻击方赢得这一轮的概率是A/(A+D),防守

方相对地是D/(A+D)。

每一轮都会造成一个固定量的伤害。这个伤害从开始时总的100点HP中减去,伤害的

数值由双方的力量决定(见下)。如果上面的D=4的弓箭手被一个A=6的弓骑兵(先不考

虑先攻的因素,所以选用一个免疫先攻的兵种)攻击,在一轮中被击中造成的伤害是24

点,这轮结束后弓箭手还有76点HP。

一轮造成的伤害

一轮造成的伤害的基本值是20点,也就是1/5的HP,但是双方的A和D也会影响各自造

成的伤害。

进攻方对防守方一轮造成的伤害是:20*(3*A+D)/(3*D+A)
防守方对进攻方一轮造成的伤害是:20*(3*D+A)/(3*A+D)

结果会被四舍五入成整数。所以,弓箭手一轮对弓骑兵的伤害是20*9/11=16,而弓

骑兵一轮对弓箭手的伤害是20*11/9=24。

可能的命中数

因为每一击都会造成固定的伤害,这就是说一个单位在死亡之前接受的命中数也是

固定的。这个数值只取决于A和D的对比。

还举上面的例子,弓箭手一次受伤24点,也就是说它会在第5次被命中的时候死亡。

4次之后它只剩4点HP,第5次是致命的。

类似的,弓骑兵一次受伤16点,第7次被命中将会死亡。

因为这个数值已经确定,最终影响结果的只取决于双方的命中数。

基本胜率计算

现在需要的东西都齐全了,就可以开始计算基本胜率。

弓箭手要胜弓骑兵,需要在自己被命中5次之前,先命中弓骑兵7次。也就是说,胜

率是在11轮战斗中至少赢得7次,而每次的胜率都是D/(A+D)=0.4。我们先计算刚好11轮

赢7次的概率,然后按同样的算法计算在11轮中赢8,9,10,11次的概率,然后全部相加

,就是最终的胜率。

概率论中有一个伯努利过程,可以用一连串的事件X0X1..Xn来模拟一轮轮的战斗。

每一个事件发生的概率都是p=D/(A+D)。那么在n=11轮中赢k=7次的概率符合二项式分布

,f(k;n,p)=C(n,k)*(p^k)*((1-p)^(n-k))。这里C(n,k)是二项式系数,用代数式表达就

是(n!)/(k!*(n-k)!)。

把数字带入得f(7;11,0.4)=C(11,7)*(0.4^7)*((1-0.4)^(11-7)) = 0.0701

这是11次刚好赢7次的概率7%

然后同理计算其他几种情况,最终胜率是
f(7;11,0.4)+f(8;11,0.4)+f(9;11,0.4)+f(10;11,0.4)+f(11;11,0.4) = 0.0701 +

0.02336 + 0.00519 + 0.000692 + 0.0000419 = 0.09935

所以弓箭手赢弓骑兵的概率大约是9.9%

然后我们再来看一下如果弓箭手赢了它还会剩下多少力量。在赢的情况下,有70%的

可能性被击中4次,23%被击中3次,5%被击中2次,其余忽略不计。那么加权平均值是0.7

*(100-4*24)+0.23*(100-3*24)+0.05*(100-2*24)=2.8+6.4+2.4=11.64 HP。转化成力量

来看,2.5*11.64%=0.3。它平均只剩下0.3的力量了。这只是假设它获胜,因为90%的情

况下它会输掉。

先攻的作用

假设这个弓箭手有两次先攻,这次进攻他的是一个剑士,力量和弓骑兵一样也是6,

但是没有免疫先攻的能力。

那么,前两轮的战斗和之前不一样,弓箭手如果赢了,会正常造成伤害;如果输了

,不会受到伤害。之后的战斗就和以前一样了。

计算的时候把前两轮分成三种情况考虑,第一种情况是头两轮弓箭手一箭都不中,

出现这种情况的概率是36%,然后接下来的情况就和上面的例子完全一样,0.09935的胜

率。第二种情况是中一箭,发生的概率是48%,接下来就要在10轮中至少赢得6轮,0.194

的胜率。如果两箭都中,发生概率16%,接下来要在9轮中至少赢得5轮,0.404的胜率。

总胜率就是0.36*0.0707 + 0.48*0.194 + 0.16*0.404 = 0.183

这次弓箭手有18.3%的概率获胜。

撤退

(这个我也简单翻译一下)

撤退只在攻击方的最后一轮生效(防守方不能撤退)。仍然按照通常的战斗进行,

万一攻击方这一轮会被打死时,根据这个兵种的撤退概率随机。如果成功,退回来;失

败就死了。


玩游戏可以在很大程度上让大家放松放松,但是我建议大家不要把过多的时间投入到工作当中,因为这样的话大家很有可能上瘾,这样不利于大家的工作或者是学习。