用单文件 HTML 写一个能对弈的中国象棋 AI——从规则引擎到 Alpha-Beta 剪枝
一次「中国象棋 + 纯前端 + 自写搜索算法」的完整实践。零依赖、零构建,双击即玩。本文记录规则引擎、AI 搜索、Canvas 渲染的设计思路,以及布局调试中踩过的几个值得记住的坑。
WorkBuddy + GLM-5.2 开发的,花了 200 积分。开发出来第一个版本并没有花多少钱,问题是反复修改一些小问题,积分用量就上来了,感觉缓存并没有起作用。
一、需求与技术选型
需求很朴素:一款可以人机对弈的中国象棋 Web 应用。
权衡后定的方案:
| 维度 | 选择 | 理由 |
|---|---|---|
| 形态 | 单文件 index.html |
双击即可运行,无需构建、无需服务器,便于分享 |
| 技术栈 | 原生 HTML5 + CSS3 + ES6 | 零依赖,引擎/AI/UI 全在一个文件里也能保持清晰 |
| 棋盘渲染 | Canvas | 棋盘线条、楚河汉界、九宫斜线用 Canvas 绘制最直接 |
| AI 算法 | Minimax + Alpha-Beta 剪枝 | 经典、可控、纯前端可跑,难度由搜索深度决定 |
架构上坚持一点:引擎层(棋盘状态 + 走子规则 + AI)与 UI 层(渲染 + 交互)彻底解耦。引擎函数只操作棋盘数组,不碰 DOM,方便单独测试和替换。
二、棋盘数据结构
中国象棋是 10 行 9 列的交叉点棋盘。用一个二维数组表示:





















