Castle Arena新闻

开发日志

2026年10月4日

八个人,一场战斗

TECH文章 #11
黄昏时的红色城堡围攻战,河谷
黄昏时的红色城堡围攻战,河谷

在昨天的收据中,未完成事项的清单有一行写着"更多人在线"。当时,在线团队对局只是你和一位朋友,各自带着 AI 盟友。现在,每个席位都可以由真人占据:从 2v2 到 4v4,房间内最多 八名玩家,外加四名观战者。空席位仍然交给 AI,因此你可以和四位朋友加两个 AI 打一场 3v3。

房间

在房间里,每支队伍都是一列席位。加入的人会坐在人数较少那一方的空席位上,并可以使用坐这里换位,直到点击就绪为止。空席位会显示"AI 席位"。在同一支队伍中,阵营不会重复(除非游戏模式允许),而就绪现在会在你的阵营与队友冲突时立即发出警告,而不是让房主在开始时才发现问题。公开房间列表会显示人数形式以及已经加入的人数。

在轮选模式中,选择顺序在所有玩家之间按 1-2-2-1 进行:先是一方的第一位玩家,然后是另一方的两位,再是第一方的两位,依此类推。轮到 AI 席位时,它们会自行选择。

星形,而非网状

只有两个人时,两台电脑直接互相交换指令。而有八个人时,让每个人都相互连接需要 28 条连接,每条都可能以各自的方式失败。因此,在线团队对战采用星形结构:每位来宾只与房主通信,由房主把每位玩家的指令转发给其他人。传输的仍然只是指令,每个回合只有几个字节,并且每台电脑都会运行完整的战斗,就像一对一时一样。战斗"指纹"的校验同样经由房主进行。

有人掉线时

在一对一中,如果另一名玩家掉线,对局会暂停并等待。在 4v4 中,这样对其他六名玩家就不公平了,因此这里的处理方式不同:AI 会立即接管掉线玩家的席位,从每台电脑上的同一个回合开始。这次切换会被记录为一条普通指令,因此录像和观战者看到的内容完全一致。

掉线的玩家打开游戏并选择返回对局。房主会发送一份完整的战斗快照,在玩家的电脑构建场景并追赶进度的同时,AI 会继续替他们操作。一旦两边同步,玩家就会请求收回席位,并在一个双方都同意的回合接管,这个回合会提前到足以让每个人都提前知道的时点。没有人需要停下来等待。

那如果掉线的是房主呢?那就没有人可以转发了,所以其他所有人都会通过重连倒计时暂停。当房主回来时,他会询问每位来宾掉线后看到了什么,然后采用进度最靠前的那份快照,并合并那些只有其他人收到过的指令。如果房主没有及时回来,他的队伍会因弃权而落败。

投降现在需要投票:一支队伍的人数超过半数投票,才会认输。如果你是队伍中唯一的玩家,你仍会像以前一样立即投降。

八个打开的窗口教会了我们什么

不带图形的测试会模拟 2v2 到 4v4,包括来宾和房主的掉线与回归,并检查所有人最终是否处于同一场战斗中。但我们也运行了真正的游戏:2v2 时开四个窗口,4v4 时开八个窗口,全部在同一台机器上,每个人由 AI 代为操作。对局中途,我们关闭了一个窗口,然后又重新打开。每个窗口最终都得到了完全相同的战斗。在此过程中,出现了四个不带图形的测试没有捕捉到的问题:

  • 永远无法开始的房间。 所有人加入时都使用了默认阵营,而一支队伍不能重复阵营。这就是"就绪"处那条警告的由来。
  • 放弃加入的来宾。 八个窗口同时加载时,房主回应很慢,而加入请求只发送了一次。现在它会持续尝试,最长可达 20 秒。
  • 所有人都在等一个人。 在第一版中,快照一发出,席位就立即交还给回归的玩家,而其他七个人要等待大约 30 秒才能加载完场景。这就是 AI 一直占着席位,直到玩家追上进度的原因。
  • 开局时最慢的电脑。 任何用超过 8 秒才完成对局设置的玩家,都会在第一个回合之前把席位输给 AI。现在,仍在加载的玩家可以获得 45 秒。

还有一个比较隐蔽的问题,是通过阅读代码发现的:来宾可以比房主领先几个回合,如果他的席位在一个他已经以 AI 身份走过的回合上交还,对局就会崩溃。现在,这种情况有了专门的测试。

仍然缺少的内容

如果房主掉线且永远不回来,就没有人接管房间:他的队伍会落败。而且,即使是两名盟友之间,指令也始终要经过房主。这两项都已列入清单。

— Castle Arena 团队