五子棋 · 连成五子背后的平衡难题
五子棋 (gomoku / 连珠 renju) —— 15×15 棋盘, 黑先手, 双方轮流落子在交叉点上, 谁先把己方棋子连成横 / 竖 / 斜任意一条五子的线即胜(自由规则下六子及以上同样算赢)。规则一句话说完, 难点却不在规则, 而在一个不舒服的事实:先手太强了。
本系列从这件事拆开:先上手玩一局 (规则可切换 / 对战启发式 AI);看规则全景讲清自由规则为何先手必胜、连珠与 Swap2 两条平衡路线各自的取舍;再单独盯黑棋禁手的三三 / 四四 / 长连怎么判;最后用 WebRTC 搭一个无需自建后端也能两台设备真对战的联机版。与同被「完全解出」一类的 井字棋 互为对照:那里双方最优必和, 这里先手却必胜 —— 于是才需要从规则层面打补丁。
上手玩:规则可切换的对局
系列的入口体验。一个能下的 15×15 棋盘,在自由 / 连珠禁手 / Swap2 开局三套规则间切换感受差别;可本地双人轮流落子,或对战一个启发式 AI。胜负即时判定并高亮连成的那条五连线,连珠规则下还能标出黑的禁手点。
规则全景:为什么要给黑棋打补丁
自由规则下先手必胜,于是有了两条平衡路线:连珠给黑设禁手,Swap2 让开局摆得不偏才安全。
黑棋禁手:三三 / 四四 / 长连
连珠规则只约束黑:走出两个活三(三三)、两个四(四四) 或六子以上的长连即判负,白棋无禁手。逐类摆出标准局面看判定边界,还有「成五优先于禁手」的特例,以及一个自由落黑子、实时标出全部禁手点的探索沙盒。
联机对战:无后端的 P2P 实现
两台设备之间的联机对局:连接建立、落子同步与断线重连的处理。
延伸阅读
- Gomoku — Wikipedia en.wikipedia.org 五子棋的规则、变体 (free-style / standard / renju) 与「自由规则先手必胜」的结论。
- Renju — Wikipedia en.wikipedia.org 连珠规则的禁手定义 (三三 / 四四 / 长连只罚黑) 与现代赛事的开局平衡手段。
- Gomoku · Opening rules — Wikipedia en.wikipedia.org Swap2 (交换开局) 协议:先手摆三子后由对方选边或加子换手, 靠对称化抹平先手优势。
- RTCDataChannel — MDN developer.mozilla.org 浏览器间点对点数据通道的标准 API;联机页用它在两个 peer 之间直接传落子, 无需服务器中转。