我用几个小时开发了一款完全本地的中国象棋对弈软件

52 次阅读

本文最后更新于 2026年7月31日。

我用几个小时开发了一款完全本地的中国象棋对弈软件

为什么做这个

说起下象棋这件事,我真的受够了。

想找个地方安安静静下一盘棋,结果打开手机应用商店搜"象棋",跳出来一排一排的 App,点进去一看——开局动画要等 15 秒,弹个"开通会员立享无广告"的横幅,好不容易点掉了,又冒出来一个"看 30 秒广告领取悔棋次数"的提示框。

最让我崩溃的是某次下到中局,下了一步臭棋想悔棋,弹出来一个付款二维码,告诉我"开通 SVIP 即可无限悔棋"。

那一刻我突然觉得:我只是想下盘棋而已啊

后来又试了几款网页版的小程序,问题也都差不多——不登录不让用、登录了要绑定手机号、绑定完手机号要看广告、看广告得等 30 秒。棋还没下呢,光是这些前置流程就够我喝一壶茶了。

再后来我试着用电脑上的专业软件,比如经典的象棋巫师、佳佳象棋。功能确实强,可一安装就是好几百兆,要注册账号,要联网激活,UI 长得像十年前的产物,启动速度慢得让人抓狂。

我就想:有没有一种可能,做一款完全本地、双击就能用、没有任何广告和会员的象棋软件?

于是就有了这个项目。

它能做什么

简单说,这就是一款装在电脑上的象棋教练。你打开它,就能立刻和 AI 下棋。
screenshot-1-initial.png
但和那些"开局送你三个大子"的水货 AI 不一样,它背后是 Pikafish 引擎——目前公认最强的中国象棋开源引擎之一,2022 年世界冠军赛级别的强度,业余选手基本不可能下过它的最高难度。

为了照顾不同水平的棋友,我做了 10 个难度等级

  • 1-3 级:刚学棋的小朋友也能赢,适合熟悉规则
  • 4-6 级:业余爱好者水平,会犯错但也会给你机会
  • 7-9 级:业余高手水平,每一步都需要认真思考
  • 10 级:完全释放引擎实力,业余 8 段以上才有得一战

最有意思的是,它不是冷冰冰地下棋。你每走一步,它会告诉你这一步是"好棋"、"正招"还是"漏着";AI 走完一步,它会解释这一步的意图——是威胁你的车,还是准备弃子攻杀。
screenshot-3-board-detail.png
右上角那个红色和黑色的横条,是胜率条。AI 思考的时候,胜率会实时变化,深度、评估分、胜率、搜索节点数都一目了然。你能清楚地看到 AI 是怎么思考的,就像掀开了引擎的盖子。

它有这些贴心的小功能

1. 提示功能

卡壳了?点一下"提示"按钮,AI 会用最高强度给你算一步好棋,告诉你"建议走法:马八进七"。

而且这个提示不是瞎给的,是 AI 关掉所有"放水"设置、满血状态算出来的——它给你的建议,就是它自己最想走的那步

2. 悔棋功能

走错了想反悔?按一下"悔棋",自动撤销你和 AI 的最近两步,回到你思考的起点。想悔几步都行,只要棋谱里有。

3. 选边功能

可以选执红(先手)或者执黑(后手)。想体验执黑后发制人的感觉?切换一下就行,AI 立刻执红先走。

4. 走子记录

右边有完整的走子记录,中文记谱(比如"炮二平五"、"马八进七")配上 ICCS 坐标(比如 h2e2、b0c2),传统和现代两种记法都有,方便你复盘。

5. 讲解面板

这个是它最特别的地方。每一步棋走完,下方会有自然语言的讲解——不是干巴巴的"评估分+200",而是真正告诉你这步棋想干什么

比如 AI 走了一步"车一进三",讲解会说:

"AI 把车抬起来,准备配合中炮发动攻势,下一步可能炮击中兵。"

这不是简单的胜负判断,而是像真人教练一样在给你分析局面

screenshot-5-difficulty.png
6. 移动端适配

这可能是我做得最用心的部分。

周末在沙发上用 iPad 下棋时,我发现很多网页版象棋要么挤成一坨,要么字体小得看不清。所以我专门做了移动端适配:

  • 棋盘根据屏幕宽度自适应,绝不会出现横向滚动条
  • 难度设置默认折叠起来,避免误触滑块
  • 触摸操作优化,点击响应灵敏
  • 字体、按钮大小都按移动端习惯调过

无论你是用 iPhone、Android、平板还是电脑,打开浏览器就能用。

怎么用

这是最爽的部分。

1. 下载

直接下载 aichess.exe 这个可执行文件(几十 MB),双击运行。

就这么简单。没有安装步骤,没有注册流程,没有账号密码。

2. 启动

双击之后,浏览器会自动打开一个页面(通常是 http://localhost:8080)。如果没自动打开,你也可以手动在浏览器地址栏输入。

3. 下棋

页面上就是棋盘和操作按钮。点击你想走的棋子,再点击目标位置,就能走子。

第一次打开可能引擎还在加载,等几秒钟。看到状态栏变成"已连接"就可以开始了。

技术上怎么做的

我是个程序员,自然会聊聊实现。

整体架构是这样的:

  • 后端:Go 语言写的 Web 服务,负责和 Pikafish 引擎通信(用的是国际象棋通用的 UCI 协议),管理 WebSocket 连接,处理每一步棋的逻辑
  • 前端:纯 HTML + 原生 JavaScript + Canvas,没有任何前端框架(不需要 React、Vue 这些)
  • 引擎:Pikafish 二进制 + NNUE 神经网络权重,CPU 跑就够用,不需要显卡

为什么用 Go? 因为 Go 写并发服务很方便,编译出来就是一个二进制文件,用户双击就能用,不用装 Go 运行环境

为什么前端不用框架? 简单的棋盘交互,原生 JS 反而更轻量,加载也快。整个前端代码不到 2000 行。

几个我比较得意的设计

1. 走子历史的服务端权威

每一步棋的合法性、走子历史、当前轮到谁走,这些都以后端为准。这样即使网络断了一两秒重连,状态也不会乱。前端只负责"显示"和"接收点击"。

2. 双层评估机制

玩家走完一步后,引擎先做 80 毫秒的快速评估,生成"漏着检测"反馈;然后才开始深度思考。这 80 毫秒看起来很短,但足以让玩家立刻知道"刚才那步是臭棋"

3. 中文记谱和 ICCS 坐标双显示

我同时显示"炮二平五"和"h2e2"——前者是传统中文记谱,后者是国际通用的坐标记法。下棋谱的时候两种记法都要会,我索性一起显示出来,学棋的人对照着看,记得更牢

4. 视角自动翻转

选执黑时,棋盘会自动翻转,黑方在下方、红方在上方。我还特意做了"始终让玩家在屏幕底部"的设计,不管你选哪边,操作起来都不会别扭

5. 离线可用

引擎和权重都是本地文件,完全不需要联网。这也是我开发这个项目的初衷——断网也能下棋。

它适合谁

  • 学棋的新手:每个难度都有,能讲解每步棋的意图,比看视频教程更互动
  • 业余爱好者:能悔棋复盘,能看完整走子记录,等于自带一个私人教练
  • 没时间下长局的人:AI 思考快,开一局也就几分钟时间
  • 想安静下棋的人没有任何广告,没有任何弹窗,没有任何会员套路

写在最后

"这个好,没有乱七八糟的东西,就专心下棋。"

那一刻我觉得,这几个小时没白费。

技术本该是让生活更简单的工具,不是制造焦虑的机器。一款好的象棋软件,应该让你专注于棋盘上的 32 颗棋子,而不是页面角落里的那些小广告。

如果你也受够了那些套路满满的象棋 App,不妨试试这个。它不会向你推销任何东西,不会要你一分钱,不会偷偷在后台跑流量

打开就能用,关闭就走人。干干净净,就是下棋。

使用

Windows 用户直接下载 aichess.exe 双击运行即可。
愿你下棋愉快。