PlayPendium

Salvo · 思考的食粮

Salvo 内部探秘

在点击格子这一简单动作之下,是一台确定性的引擎:它模拟隐藏的舰队、按概率加权的推理,以及隐藏与发现之间的经典对决。3

本文以英文撰写和编辑。此中文版本由机器翻译生成;凡涉及准确性之处,以英文原文为准。 阅读英文原文 →

两块棋盘

游戏的核心是一对棋盘:一个代表你的隐藏布阵,另一个代表对手的隐藏布阵。每块棋盘上都有一支舰队,部署在划好格线的网格上,但舰船的位置对另一方是保密的。你向敌方网格开火,AI 则向你的网格开火,每一发炮弹要么击中舰船,要么落入空荡的海水。这种双棋盘架构确立了隐藏舰队对决中根本的信息不对称:每一方都完全了解自己的棋盘,却只能从自己射击的结果模式中推断对方的布局。3

正是这种设置的对称性赋予了游戏独特的性格。双方都无法直接看到对方的舰船。相反,双方都必须根据命中与未命中这些稀疏的反馈,在脑中构建隐藏网格的模型。每一发炮弹都成为数据,每一次命中都缩小可能性的范围,每一次落空都把一片区域排除在考虑之外。引擎的游戏协调器负责管理这两块棋盘,确保射击被记录、命中被正确归属,并且只有在一方的整支舰队全部被击沉时游戏才会结束。3

确定性的模型把盲目猜测变成有依据的搜索。

随机布局,确定性规则

开局之前,引擎会以随机方式布置 AI 的舰船。这种随机并非毫无章法;它是有种子的,也就是说,给定的种子值总会产生相同的布局。这种基于种子的确定性是一项设计选择,让游戏可以复现、可以测试。如果你用同一个种子运行游戏,就会得到相同的舰船位置、相同的 AI 决策序列,而且只要你走出同样的着法,还会得到相同的结果。这一特性对于调试、对于理解 AI 在不同条件下的行为都很有价值。3

舰队一旦布置完毕,支配对局的规则就是固定且确定的。在 AI 确实需要随机选择的地方——在同样好的格子之间打破平局,或决定是否用声呐扫描——它取数的也是同一个带种子的生成器,因此没有任何东西交给外部的偶然。AI 做出的每一个决定都源于它所维护的概率模型,你射出的每一发炮弹都会被记录和分析。除了你自己的选择之外,唯一的变数来源是决定初始舰队布置的种子。这意味着游戏归根结底是一道谜题:在规则的约束和射击反馈的基础上,你能否在 AI 推断出你的布局之前,推断出它的隐藏布局?3

开火

当你开火时,引擎会把这一发记录在目标棋盘上,并判断它是命中还是落空。这由引擎的一个步骤完成:它更新棋盘状态并确定结果。命中会把该格标记为有舰船占据,落空则把它标记为空荡的海水。随后,引擎会检查包含该格的舰船的所有格子,判断这艘船是否已被完全击沉。如果一艘船的所有格子都被击中,这艘船就被击沉,这一信息会同时告知双方。3

获胜条件简单明了,却影响深远。当对手的舰船全部被击沉时,一方获胜。引擎会检视对手棋盘上的每一艘舰船是否都已被完全击中,以此进行判断。一旦满足这个条件,游戏立即结束。获胜条件这种全有或全无的性质意味着每一发炮弹都至关重要。每一方会暴露什么,是由规则决定的:每次击沉都会公布沉没舰船的名称,因此对方能确切知道还剩哪些舰体;而一艘受伤的舰船若借助每局一次的重新部署溜走,也会留下痕迹,因为它原先格子上的命中记录会变回普通的落空。3

AI 按可能性搜寻,再以锁定目标收尾。

概率引擎

这个游戏里的对手不是简单的随机射手。它是一个按概率瞄准的 AI,会权衡每个隐藏格子藏有舰船的可能性有多大。AI 维护着一个关于敌方网格的概率模型,随着射击进行和反馈到来而不断更新。由于剩余舰船的放置约束而不可能藏有舰船的格子会被标记为不太可能,而为了容纳剩余舰船的放置必须藏有舰船的格子则被标记为很可能。然后,AI 会向概率最高的格子开火,把盲目猜测变成有依据的搜索。3

这个概率模型建立在可能性的数学之上,在那里,事件用介于零和一之间的数字来描述2。概率为零意味着事件不可能发生,概率为一则意味着事件必然发生。AI 利用这些数值描述来指导射击,优先选择找到舰船概率最高的格子。正是这种方法把这个 AI 与纯粹的随机射手区分开来,并赋予它标志性的搜猎行为。

搜寻与锁定

AI 的行为可以分为两个阶段:搜寻与锁定。在搜寻阶段,AI 向尚未发现的舰船最可能所在的格子开火,以寻找舰船。这是一种大范围搜索,目的是首次接触敌舰。一旦记录到命中,AI 就转入锁定阶段,集中攻击命中格的相邻格子,把那艘船彻底击沉。这种两阶段方法与人类玩家的思路如出一辙:先找到舰船,再击沉它们。3

搜寻与锁定之间的切换取决于上一发是命中还是落空。如果上一发落空,AI 就回到搜寻模式,寻找概率最高的格子。如果上一发命中,AI 就进入锁定模式,向命中格的相邻格子开火。这条简单的规则与概率模型相结合,形成了一套在探索与利用之间取得平衡的连贯策略。AI 通过探索网格来寻找舰船,并利用对命中位置的了解来高效击沉那艘船。3

三档难度强度调节 AI 的行为。

三档强度

AI 有三档难度强度,用来调节它的行为。这些强度会影响 AI 权衡概率和做出决策的方式。在较低强度下,AI 可能会犯更多错误,或者在锁定目标时不那么激进。在较高强度下,AI 的概率计算更加稳定,锁定目标时也更加无情。多档强度让玩家能够找到适合自己的挑战水平,从休闲游玩到严肃对抗皆可。

这些强度的具体实现位于引擎的 AI 组件之中。难度等级会改变 AI 解读概率模型的方式,以及它在探索与利用之间取得平衡的方式。这种设计让 AI 既能让休闲玩家轻松上手,又能给有经验的玩家带来挑战,而无需改变游戏的基本机制。3

声呐探测

在经典规则之上还有一个新花样:声呐探测。这项能力让一方以放弃当回合射击为代价,揭示敌方网格中一块 3×3 区域的读数。声呐探测会显示这块 3×3 区域中的每个格子是藏有舰船还是空荡的海水。这些信息对于缩小舰船位置的范围可能极为宝贵,但代价是失去当回合的射击机会。3

是否使用声呐探测是一个战略决策。什么时候这些信息值得付出这样的代价?如果你苦于找不到舰船,声呐探测可以带来你需要的突破。如果你即将击沉一艘船,失去一次射击的代价可能就太高了。声呐探测为游戏增添了一层资源管理,迫使玩家在信息的价值与行动的价值之间权衡。3

重新部署是一次性的防御选项。

每局一次的重新部署

经典规则的另一个新花样是每局一次的重新部署。每一方在一局中都可以移动自己的一艘舰船一次。这种防御性闪避不消耗回合,也就是说,你可以在重新部署之后,仍然在本回合开火。重新部署能力让你可以在舰船受到威胁时把它移出危险区域,或者把它转移到更易防守的位置。3

重新部署能力只能使用一次,这让它弥足珍贵。什么时候该用?如果一艘船即将被击沉,重新部署可以救它一命。如果你对当前布阵很有信心,重新部署可能就是浪费。是否重新部署是一个战略决策,需要仔细考虑当前的局势以及对手可能采取的行动。3

每回合一发

所有这些机制的基础,是每回合一发的经典规则。每一方每回合恰好开火一次,双方轮流进行。这条规则确立了游戏的节奏,并确保双方拥有平等的行动机会。正是每回合一发的规则,让这个游戏成为斗智而非比快的对决。3

正是这条经典规则,让游戏扎根于“海战棋”(Battleship)的传统之中:那是一种双人策略型猜谜游戏,在划好格线的网格上进行,每位玩家的舰队都对对手保密1。每回合一发的规则,让这个游戏成为对推理和概率的考验,而非对反应速度的考验。这是一条简单的规则,却赋予了游戏独特的性格和挑战。

纯粹的确定性让游戏可以测试。

基于种子的确定性

引擎是纯粹的、基于种子的确定性引擎,由它自己的带种子随机数生成器驱动。这意味着游戏的每个方面都由开局时提供的种子值决定。给定相同的种子,游戏总会产生相同的事件序列,从最初的舰队布置到最后一发炮弹。这一特性让游戏可以测试,因为同一场景可以被复现和检视。3

基于种子的确定性对理解游戏也有意义。如果你想了解 AI 在某个特定场景中的行为,可以用特定的种子运行游戏并观察结果。如果你想测试某种策略,可以用同一个种子多次运行游戏,看看它的表现如何。这种可复现性对玩家和开发者来说都是一项宝贵的特性。

Sources & notes

  1. "Battleship (game)," Wikipedia, a strategy-type guessing game for two players, played on ruled grids on which each player's fleet of warships is marked and concealed from the opponent; players alternate calling shots at the other's grid to hit and sink ships, aiming to sink the entire fleet; the game evolved from a pencil-and-paper game dating to around the World War I era; the first commercial version was called Salvo, published by the Starex company in 1931, and in 1967 Milton Bradley published a version using plastic pegboards and miniature ships; and in the "salvo" variant a specified number of squares are targeted at one time, all attacked simultaneously. en.wikipedia.org/wiki/Battleship_(game).
  2. "Probability," Wikipedia, a branch of mathematics concerning numerical descriptions of how likely events are to occur; the probability of an event is a number between 0 and 1, where 0 indicates impossibility and 1 indicates certainty, and the larger the probability the more likely the event (for example, a fair coin flip has probability 0.5 for each outcome). en.wikipedia.org/wiki/Probability.
  3. This game's engine: a Battleship game where each side has a board with a hidden fleet, the human fires at the enemy fleet and the AI at the human's, one shot per turn (classic rules), each shot is recorded as a hit or miss, and a side wins when the opponent's ships are all sunk; the opponent is a probability-targeting AI with three difficulty strengths that "hunts" for ships by favouring the cells where an undiscovered ship is most likely to sit and then "targets" the neighbours of a hit to finish it; two twists sit on the classic rules, a sonar ping reveals a 3×3 ship/empty readout but costs that turn's shot, and each side may reposition one of its own ships once per game (a dodge that does not cost the turn); and the engine is pure and seeded-deterministic.
  4. Further reading on Probability, Interpretations of Probability (Stanford Encyclopedia of Philosophy/Winter 2012 Edition). plato.stanford.edu.
  5. Further reading on Probability, Probability -- from Wolfram MathWorld. mathworld.wolfram.com.
  6. Further reading on Probability, Logical foundations and measurement of subjective probability. doi.org.
Was this worth reading?
Play Salvo
PlayPendium · About · Contact · Privacy · Terms · Cookies · Accessibility · Copyright · Browse all games · Classic arcade games · © 2026