个人工具

帮助:生物设计/计算实力

出自Meshal Lite

< 帮助:生物设计
在2019年11月3日 (日) 13:26由Pucs (讨论 | 贡献)所做的修订版本
(差异) ←上一修订 | 最新修订 (差异) | 下一修订→ (差异)
跳转到: 导航, 搜索












计算生物实力

在设计一个生物时,你需要计算出这个生物的实力水平,用以将之归入恰当的挑战难度中。一个生物的实力水平由属性分防护分(和免疫分)、感知分移速分机动分防御分能力分等构成(tbd:之后还将包括物品分)。

补充
  • 为生物计算实力时,装备中的物品已经生效,所以其影响应当直接计算在实力中。


算法

计算
属性分
$strength['attr']

分别计算每项属性的累积潜能花费并将结果相加。可使用等差数列求和的算法:∑属性n=1+2+3+……+(n-1)-属性起算阈值。将三项属性的结果相加,然后×属性分系数得到实力。

  • 对于低于属性起算阈值的属性,则反过来扣除实力(属性不可能低于1,如果低于1则视作1)。
  • 可参考受训属性的提升规则,但在计算生物实力时,应当将所有基础属性都用于计算(包括天生、特征、受训的属性部分)

计算因子

  • 属性起算阈值
    $attrTH
    :3
  • 属性分系数
    $attrM
    :3

经过优化的PHP算法如下:

/*计算属性分*/
$strength += (array_sum(range(0, $attr['强壮'] - 1)) - $attrTH) * $attrM
                + (array_sum(range(0, $attr['敏捷'] - 1)) - $attrTH) * $attrM
                + (array_sum(range(0, $attr['精神'] - 1)) - $attrTH) * $attrM;
计算
防护分
$strength['prot']
免疫分
$strength['immunity']

计算防护分时,需要注意分为两个步骤:分别计算防护分和免疫分。

先计算每项防护分,使用等差数列求和算法:∑防护n=1+2+……+n。将三项防护分结果相加,然后×防护分系数

  • 如果防护<0,可同样用等差数列求和:∑防护-n=-1-2-……-n。
  • 如果该生物免疫某种攻击类型,那么对应的防护就无需计算(而是交由免疫分计算)。

然后计算免疫分,如果该生物免疫1种攻击类型,那么视作1;免疫2种攻击类型视作2;免疫3种攻击类型视作3。接着用等差数列求和:∑免疫n=0+1+……+n。然后将求和结果×免疫分系数


计算因子

  • 防护分系数
    $protM
    :2
  • 免疫分系数
    $immunityM
    :30

经过优化的PHP算法如下:

/*计算防护和免疫分*/
$strength += ($immunity['物理'] == 0 ? array_sum(range(0, $prot['物理'])) * $protM : 0)
                + ($immunity['侵蚀'] == 0 ? array_sum(range(0, $prot['侵蚀'])) * $protM : 0)
                + ($immunity['灵异'] == 0 ? array_sum(range(0, $prot['灵异'])) * $protM : 0)
                + array_sum(range(0, $immunity['物理'] + $immunity['侵蚀'] + $immunity['灵异'])) * $immunityM;
计算
移速分
$strength['legerity']

每个移动方式都使生物的实力得到更多提升,因为这会拓展生物的行动维度。计算时,分别将每种移速都做等差数列求和,然后将结果相加并×移速分系数

  • 移速不可能低于0,如果低于0则视作0

计算因子

  • 移速分系数
    $legerityM
    :1

经过优化的PHP算法如下:

/*计算移速分*/
$strength['legerity'] = 0;
foreach ($move as $method => $speed) {
        $strength['legerity'] += array_sum(range(0, $speed)) * $legerityM;
}
计算
知觉分
$strength['intuition']

计算时,统计生物的感知方式种类,然后将统计结果做等差数列求和,将结果×知觉分类型系数。在此结果上,再累加所有类型的感知距离平均值×知觉分距离系数

  • 知觉不可能低于0,如果低于0则视作0

计算因子

  • 知觉分类型系数
    $intuitionMethM
    :1
  • 知觉分距离系数
    $intuitionDistM
    :0.02

经过优化的PHP算法如下:

/*计算知觉分*/
$strength['intuition'] = array_sum(range(0, count($intuition))) * $intuitionMethM
                                + array_sum($intuition)/count($intuition) * $intuitionDistM;
计算
机动分
$strength['exec']

将机动做等差数列求和:∑机动n=1+2+3+……+(n-1)-机动起算阈值。然后将结果×机动分系数

  • 对于低于机动起算阈值的,则反过来扣除实力(机动不可能低于0,如果低于0则视作0)。

计算因子

  • 机动起算阈值
    $execTH
    :3
  • 机动分系数
    $execM
    :5

经过优化的PHP算法如下:

/*计算机动分*/
$strength += (array_sum(range(0, $exec - 1)) - $execTH) * $execM;
计算
防御分
$strength['def']

将所有防御优劣势相加求和:∑防御=格挡优势+闪避优势+抵抗优势。然后将结果×防御分系数

  • 劣势被视作负数的优势。

计算因子

  • 防御分系数
    $defM
    :1

经过优化的PHP算法如下:

/*计算防御分*/
$strength += ($def['格挡'] + $def['闪避'] + $def['抵抗']) * $defM;
计算
能力分
$strength['ability']

将所有能力等级相加求和,然后将结果×能力分系数

  • 计算能力等级时,包括天赋能力在内的能力等级也应当计算在内。
  • 计算能力等级时,被动能力对属性、防护、移速、知觉、机动的数值影响应当直接计算在实力中,此类被动能力的能力等级无需计算。但如果该被动能力有其他非直接影响属性的效果,则应计入它的能力等级。
  • 计算能力等级时,对战斗无影响的能力(常见学识能力)

计算因子

  • 能力分系数
    $abilityM
    :3

经过优化的PHP算法如下:

/*计算能力分*/
$strength += $abilityLevels * $abilityM;
此处还有待编撰