单人游玩时,四座城堡中有三座由机器守卫。每个电脑军阀都在跑同一段短短的循环:找出值得畏惧的那颗球,猜它会在哪里越过你的墙,滑过去迎上它——而软柿子与劲敌之间的差别,归结为四个数字。
本文以英文撰写和编辑。此中文版本由机器翻译生成;凡涉及准确性之处,以英文原文为准。 阅读英文原文 →
军阀的第一项工作,每秒一百二十次,是分诊。场上最多有两颗球在飞,AI 必须决定哪一颗配得上它的护盾。它会给每一颗处于活动、未被握住的球打分,分值是该球到自家国王的距离,然后从任何确实正朝着自己那个角飞来的球的分值中,减去固定的 250 单位奖励——一颗正在远离的球,会被当作比实际距离远 250 单位来对待。1 分值最低的那颗赢得护盾的注意。
效果是一个不会为擦身而过、毫无威胁的球惊慌,却会猛地咬住一颗更近且正在逼近的球的防守者。这是对人类不假思索之举的一个粗糙模型:盯住朝你来的东西,无视正在离开的东西。整个判断只是球的速度与指向国王的方向之间的一个点积,为正即表示“冲我来的”,这就够了。
选定威胁之后,军阀必须决定自己该待在它那条斜向轨道的哪个位置。它并不求解完整的弹跳路径:不做反射追踪,不预测撞墙。它取球的当前位置,沿其当前速度向前推一小步(0.12 秒的提前量),再把那个未来的点直接投影到轨道上,得到一个介于 0 和 1 之间的目标分数。1
这是刻意为之的浅层预测,也正是这个 AI 可以被击败的原因。因为它只提前八分之一秒,且从不预判折射,一颗要经由撞墙才会到来的球就能骗过它;它押的是球此刻所指的方向。懂得让球撞击场地边缘反弹的人类,正是在利用这个盲点。机器以一丝丝前瞻回应当下;它并不谋划。
电脑并不计算球的未来。它向前倾八分之一秒,把护盾指向“若无事发生,球将会在的位置”,然后把一切“有事发生”都留作你的机会。
三种难度共用同一段代码本体。在简单、中等和困难之间改变的,是一行四个调校数字。1 抖动为护盾的目标位置添加随机误差,于是简单档军阀的瞄准会偏离将近其轨道的五分之一,而困难档几乎分毫不差。反应距离规定一颗球必须靠得多近,军阀才肯去追踪它:简单档会无视任何距其国王超过 420 单位的东西——略小于棋盘宽度的一半;困难档则在整片场地上全程追踪。接球概率是它抓住一颗足够靠近其护盾、可被接住的球的几率。而“瞄准对手”是一个开关,它决定这个军阀到底会不会进攻。
| 旋钮 | 简单 | 中等 | 困难 |
|---|---|---|---|
| 瞄准抖动(轨道分数) | 0.18 | 0.07 | 0.015 |
| 反应距离(单位) | 420 | 700 | 2,000 |
| 接球概率 | 0% | 25% | 55% |
| 是否瞄准对手? | 否 | 否 | 是 |
这四个数值全部来自 Bulwark 游戏引擎内部一张小小的调校表,每个档位一行。困难档的反应距离写作场地宽度的两倍,而场地是 1,000 单位见方,所以 2,000 单位意味着“永远在追踪”。1
简单档或中等档的军阀从不为了打击而接球。简单档根本不会接球,中等档也只是偶尔接上一次,而且球一旦到手,它对该拿它怎么办并没有任何计划。拨动“瞄准对手”这个开关——只有困难档才会这么做——AI 就不再是纯粹被动反应的了。当它握住球时,它会环顾棋盘,挑出伤得最重的对手(剩余砖块最少的那个),然后瞄准它。1
它做这件事不用任何寻路。它沿自己的轨道采样十一个候选位置,对每一个都复现引擎的释放运算,看那一击会朝哪个方向飞出,然后保留出射向量最直接指向所选猎物的那个位置。1 这是在少数几个选项上的暴力穷举,而非什么聪明才智,但它很有耐心:选定位置之后,军阀会一直握着球,直到护盾真的滑到那里,只有在抵达之后、或是握得够久以至于再等下去比这一击本身更划不来时,才会松手。这份意图无疑是战略性的,正是一个人类在猎取一个唾手可得的人头时会做的事。以“砖块最少”来挑选目标,意味着三个各自为战的防守者会一齐指向本来就已经落后的那一个。
军阀所做的每一件“随机”的事——瞄准中的抖动、要不要接球的抛硬币——都取自一个带种子的生成器:一段名为 mulberry32 的紧凑例程,它把一个起始数字变成一长串可重复的伪随机值。2 给它同一个种子,它就永远产生同一串序列。实战对局的种子取自时钟,所以没有两局的开场是一样的;但把同一个种子交回去,这一局就会分毫不差地重演:同样的发射角度,同样的偏摆,同样的接球。
这种确定性不是装点门面的细节。它让这款游戏可被测试——它的测试套件会从固定的种子出发,打完整局电脑对电脑的比赛,并期待每次都得到相同的结果;它也让整个模拟(连同生成器的游标)可以被打包成 JSON 再重建,于是在线对战时主机可以流式传送自己的状态,而其他每一位玩家都能重建出一模一样的棋盘。军阀们之所以显得活生生,是因为他们的失误看起来很像人;而在底下,他们的“本能”不过是一段短短的算术递推,任何人都能把它倒回起点。事实证明,一台守卫城堡的机器,只需要少数几个数字和一股可复现的运气。2