随机数
请注意,部分内容可能尚未完成或存在错误。您也可以编辑页面帮助我们完善内容。
请注意,部分内容可能尚未完成或存在错误。您也可以编辑页面帮助我们完善内容。
随机方式
骰子(Dice)
当系统需要“判断一个概率”时,通常使用一个特定的随机数生成器——一枚虚构的“百面骰子”来进行概率判定,其使用类似于《克苏鲁的呼唤》(Call of Cthulhu,简称COC)规则中的检定逻辑(本页面将沿用这一称呼):
随机生成一个0.0~100.0之间的浮点数(不包括100.0),若 该数值 < 概率×100,则视为通过(成功);反之则视为不通过(失败)。
- 明日方舟中的骰子仅以数值作为检定结果,不包含额外的“大成功”/“大失败”规则。
- 游戏中大部分以“X%”标注的概率均为“进行一次骰检定,若成功则...”的逻辑,其中包括但不限于概率闪避(如贝洛内)、概率晕眩(如梅)、概率格挡(如星熊)、概率回费(如齐尔查克)等。
- ※例:贝洛内拥有80%概率的闪避效果(也即检定成功的阈值为80)。当其受到合适的伤害时,他会进行一次骰子检定。
假设“骰子”的结果为82.0,82.0 > 80,检定失败,继而导致闪避不触发;若结果为20.3,20.33 < 80,则检定成功,继而触发闪避效果,将此次伤害闪避(若可能)。 - ※部分不标注“X%”的事件也存在使用骰子检定的情况。
丢骰子属于一次取随机数行为。因此在代理作战中如果两个取骰子的事件顺序互换,其结果也会发生互换(详见#随机数轴)。
- 概率为0时为特殊情况:此时将不会尝试投掷骰子,直接视为检定失败,因此不会占用随机数。
伪随机分布式骰子(DicePRD)
伪随机分布(Pseudo Random Distribution),简称 PRD,是一种确保一个事件的概率不会过度连续发生,也不会过度连续不发生的算法。
其原理简单来说就是“依照连续失败的次数,增加成功的概率”。
游戏中存在两种伪随机分布式的随机数生成器,且都被称为 DicePRD,因此此处以使用者为区别进行解释。
虽然名字也叫“骰子”,但伪随机分布式骰子的算法是复合的,其实际占用的随机数数量会根据算法的不同产生变化。
澄闪式DicePRD
可能是为了确保天赋不会频繁连续触发,同时也不至于始终触发,游戏内为澄闪的第一天赋自爆概率设计了一套伪随机分布式随机数,它具有以下参数:
- 初始概率:即首次丢“骰子”时的概率,单位为100%
- 累加概率:即每次失败时累加的概率,单位为100%
- 保底次数:即连续失败即将达到一定次数后,必定成功的保底机制
- 连续失败次数将记录在使用 DicePRD 的单位身上(每次失败时+1,成功时归零)
每次遇到调用此 DicePRD 的事件时,会执行下列计算:
- 若 连续失败次数+1 ≥ 保底次数,则跳过后续计算步骤,直接判定成功。
- 否则,计算 实际概率:\(\text{实际概率}=\text{初始概率}+\text{连续失败次数}\times\text{累加概率}\)
之后以实际概率,使用骰子进行一次检定。
※特别的,如果 实际概率 ≥ 100%,也不会使用骰子检定,直接判定成功。
作为用例参考,在澄闪的例子中:
- 初始概率 及 累加概率 = 0.015
- 保底次数 = 40
- 使用 DicePRD 的单位 = 自身
- 调用事件 = 浮游单元攻击时
卫戍协议式DicePRD
在卫戍协议:盟约 下半期中,可能是为了确保一些概率不至于低到一整局无法触发,游戏内为【叙拉古】盟约的再部署概率使用了一套新的伪随机分布式骰子。该骰子也被用于新版的【不屈】盟约。
它具有以下参数:
- 期望概率:即 DicePRD 最终希望给玩家带来的事件发生的宏观综合概率
- 基础概率:使用乘以100随后就近取整后的期望概率进行表格查询,使用表格中对应的值作为计算用的基础概率
- 连续失败次数将记录在全局黑板上,在同一场战斗内的不同干员、不同玩家间互通(每次失败时+1,成功时归零)
每次遇到调用此 DicePRD 的事件时,会执行下列计算:
- 根据预设对照表,以期望概率为基准获取要使用的基础概率。
期望概率与基础概率对照表 期望概率(就近取整至1%) 对应的基础概率 0 0.0 1 0.00016 2 0.00062 3 0.00139 4 0.00245 5 0.0038 6 0.00544 7 0.00736 8 0.00955 9 0.01202 10 0.01475 11 0.01774 12 0.02098 13 0.02448 14 0.02823 15 0.03222 16 0.03645 17 0.04092 18 0.04562 19 0.05055 20 0.0557 21 0.06108 22 0.06668 23 0.07249 24 0.07851 25 0.08474 26 0.09118 27 0.09783 28 0.10467 29 0.11171 30 0.11895 31 0.12638 32 0.134 33 0.14181 34 0.14981 35 0.15798 36 0.16633 37 0.17491 38 0.18362 39 0.19249 40 0.20155 41 0.21092 42 0.22037 43 0.2299 44 0.23954 45 0.24931 46 0.25987 47 0.27045 48 0.28101 49 0.29155 50 0.3021 51 0.31268 52 0.32329 53 0.33412 54 0.34737 55 0.3604 56 0.37322 57 0.38584 58 0.39828 59 0.41054 60 0.42265 61 0.4346 62 0.44642 63 0.4581 64 0.46967 65 0.48113 66 0.49248 67 0.50746 68 0.52941 69 0.55072 70 0.57143 71 0.59155 72 0.61111 73 0.63014 74 0.64865 75 0.66667 76 0.68421 77 0.7013 78 0.71795 79 0.73418 80 0.75 81 0.76543 82 0.78049 83 0.79518 84 0.80952 85 0.82353 86 0.83721 87 0.85058 88 0.86364 89 0.8764 90 0.88889 91 0.9011 92 0.91304 93 0.92473 94 0.93617 95 0.94737 96 0.95833 97 0.96907 98 0.97959 99 0.9899 100 1.0
- 计算 实际概率:\(\text{实际概率}=(\text{连续失败次数}+1)\times\text{基础概率}\)
之后以实际概率,使用骰子进行一次检定。
作为用例参考,在【叙拉古】盟约的例子中:
- 期望概率 = 3%(这使得基础概率 = 0.00139)
- 首次触发事件(【叙拉古】6人盟约激活情况下,【叙拉古】盟约/【调和】盟约干员造成普通伤害)时,有0.139%概率通过检定(造成真实伤害与恐惧效果);检定未通过情况下,概率增加为0.278%。
- 后续每次检定失败都将再增加0.139%概率,直至检定成功时,概率回落至初始的0.139%。
随机整数
除了骰子以外,游戏内还存在许多概率分布并不能直接以100整数分割,或概率权重不平均的随机数。
以艾雅法拉天赋的“部署后立即随机获得7~15点技力”为例:
- 其数据内的随机范围下限为7,上限为16。
- 当每次调用随机整数时,系统会生成一个 下限 ≤ x < 上限 的随机小数,随后再对其向下取整。
因始终无法到达上限,因此游戏内显示的15(也即16-1)确实是随机整数逻辑能产生的最大整数。
取用随机整数同样属于一次取随机数行为。
随机选择
除了数字上的随机,明日方舟还存在不少事件上的随机。这里以阿天赋的“随机选择”举例:
- 待补充
取用随机整数同样属于一次取随机数行为。
随机数轴
轴与频道
待补充
不可控的“随机”
除了上述这些明确用到了随机逻辑的内容外,游戏内还存在不少实际上不可控的“随机”事件。
从程序的角度来看,它们并非随机,但从实际观测的角度来看,它们是无法预测、无法复现的。
这些不可控“随机”均不属于取随机数行为,因此均不受随机数轴影响。
同时碰撞
较为知名的一个“随机”行为。表现为不死的黑蛇释放的火球雨同时碰撞到多个单位(乌萨斯平民)时,哪个单位受伤对于玩家而言是随机的。
待补充
临时碰撞
在维什戴尔因其天赋而对于处理顺序具有的高度需求下,其被观测到的攻击命中顺序实际上完全无序且不可预测。
待补充
无序施加Buff
在死芒三技能的机制实现中,使用到了 CreateBuffInRange 方法,并让第一个处理的单位“消耗”,用于实现“消耗一个悲叹的仆役”
但此方法的处理顺序对于玩家而言也是不可预测的。
待补充