开源棋盘引擎生态
一个棋盘引擎其实分成规则、裁判和搜索三层。这篇讲清开源棋盘引擎生态怎么运作、去哪找五子棋引擎,以及网页开源游戏多出来的两条约束。
浏览器里的棋盘游戏看起来是一个整体。拆开看,一个开源棋盘游戏引擎其实是三层:规则、裁判、以及决定下一步走哪里的搜索。三层分开之后,你在 GitHub 上打开任何一个项目都不会陌生。yiboardgame.com 用的也是同样的结构,所以可以拿它当参照,看清楚每一层到底叫什么。
引擎到底在做什么
引擎不是你会看到的那个棋盘。它只回答两个问题:这一步合不合法,合法的走法里哪一个最好。棋盘画面、音效、记分都盖在它上面。很多人说自己要做一款棋类游戏,实际意思是他要做的是引擎上面那一层。
规则层和裁判层最容易被低估,但它们决定了一个项目好不好用。走法判错,你当天就能发现;胜负条件判错,你可能一个月后才发现。
每个项目里的三层结构
哪怕文件夹名字没写清楚,仓库基本都会落进这三层。读一个新项目,多半就是先找出你眼前的是哪一层。
- 规则层。只负责一款游戏的合法走法生成。代码短,容易测,通常是仓库里最老的文件。
- 裁判层。把两方的落子变成一个局面,判断胜负、和棋和重复局面。
- 搜索层。也就是走子选择器。国际象棋引擎都在这一层,你下过的每一个五子棋 AI 也在这一层。
- 呈现层。画出棋盘、把手势和点击回传下去的浏览器或桌面外壳。
开源国际象棋引擎是最好的教材
想弄懂搜索层,去读国际象棋引擎。国际象棋的开源代码比任何棋类都多,思路还能直接搬。alpha-beta 剪枝、置换表、迭代加深,都是先在象棋上成型,再被别的棋类拿去用。五子棋引擎用的是同一套剪枝,只是分支更少、一局结束得更快。
所以小棋种不是大棋种的玩具版。它是同一套算法配上更少的分支,于是代码更短、测试更简单。
在 GitHub 上找五子棋引擎
在 GitHub 搜 gomoku engine,出来的是课程作业、研究代码和少数还在维护的库混在一起。它们之间真正有用的差别不是谁更聪明,而是每个项目愿意为哪一部分负责。
- 只有规则。给合法走法,不给对手,适合做双人对战。
- 规则加搜索。可以跟电脑下,强度由搜索深度或时间预算决定。
- 规则加搜索加界面。能直接跑起来的成品,但很难再塞回你自己的项目。
- 训练代码。教一个网络评估局面,需要显卡和耐心。
- 纯库。没有界面,就是为了被别人 import。
README 里把规则讲清楚、把搜索藏在清晰接口后面的仓库,比所有逻辑糊在一个 main 文件里的项目更容易复用。这个分界也是判断一个项目能不能接进你自己代码的最好信号。
网页开源游戏项目多出来的两条约束
浏览器项目多了两条桌面引擎从来没有的约束。网页开源游戏要在一个标签页里跑起来,还要在手机上快速启动。这两条改变的是设计取舍,不是算法本身。
- 没有安装步骤,所以引擎以 JavaScript 或 WebAssembly 的形式发布。
- 没有常驻后台进程,所以长时间搜索会被换成一份时间预算。
- 不假设有服务器,所以规则和对手经常完全跑在设备本地。
- 没有内购通道,所以没有东西需要放在付费墙后面。
几百毫秒的搜索预算是最常见的折中。对新手来说足够当一个强对手,又短到棋盘不卡顿。这也是网页引擎更偏向简单评估函数的原因:预算小的时候,好的走法排序比更聪明但更慢的评分更值钱。
想看这三层在成品里怎么配合,可以读关于页,里面写了 yiboardgame.com 是怎么把它们拆开的。产品层面的问题在 FAQ 页里讲得更细。
常见问题
开源棋盘游戏引擎和国际象棋引擎是一回事吗?
不是。国际象棋引擎是搜索层里最有名的一种。五子棋、黑白棋、围棋也有各自的引擎,用的技术大部分相通。
规则代码要自己写吗?
通常不用。常见棋类的规则覆盖得很好,从零写规则往往是业余项目丢掉第一个月的地方。
浏览器里的引擎能下得好吗?
可以,但有上限。WebAssembly 加一份紧凑的时间预算足够做出像样的对手,还到不了锦标赛级别的国际象棋。
从哪里开始读代码?
挑一个你已经会下的棋的小引擎。看懂棋本身就先去掉了你一半的困惑。
Related
- 段位制 vs ELO 制:两种排名系统有何不同
2026-09-08
- 五子棋玩法:规则、开局与必胜思路
2026-08-07
- Chess.com 做对了什么:平台生意模型拆解
2026-09-09