Chess
最近迷上了两样事情,国际象棋和德州扑克。
德州扑克的项目暂时先放在后头,因为她的复杂程度会更加高,涉及的场景非常多,规则非常庞大,比如Flush大于同花,同花大于顺子,顺子大于三条,三条大于Two Pair等等这些内容,所以现在暂时还不愿意去写。
所以在简单学习了国际象棋的基本规则之后,准备搭建一个Web版本的国际象棋,现在已经提交到了Github仓库中。
搭建过程
这个项目初步搭建的时候,没有想着沿着Vibe Coding的这种Agent模式去推进开发进展,其实也就是想简单写一个HTML的页面,最开始可能只有一个页面,所有的CSS和TS代码都all in在了上面。
一开始是使用Doubao的Chat模式(你没看错,就是大名鼎鼎的情绪包去搭建的),后面逐渐切换到了AI Agent的模式去推进这一块的开发内容。心路历程是:Deepseek V4 Pro把AI模型的价格打下来了,而且Trae CN的模式也更加成熟了,CURSOR以及AntiGravity等等内容的推进是非常迅猛的。
后续又在使用了DEEPSEEP V4 Pro + Trae CN进行了一次代码上的优化甚至重构
国际象棋的规则
国际象棋真的是一件很有意思的事情。

国际象棋的核心规则可以分为棋盘棋子、行棋规则、胜负判定三大类,简单梳理如下:
- 棋盘与棋子
- 棋盘:8×8 共 64 格,由深色(黑格)和浅色(白格)相间组成,摆放时棋盘右下角必须是白格。
- 棋子:双方各16枚,包括 1王、1后、2车、2象、2马、8兵。白方先行,之后双方轮流走棋。
- 各棋子行棋规则
棋子 走法规则 特殊说明 王 横、竖、斜向每次只能走1格 不能主动走入被对方攻击的格子;不能与己方王处于相邻格 后 横、竖、斜向可走任意格数,无阻挡时 是棋盘上威力最强的棋子 车 横、竖方向可走任意格数,无阻挡时 参与王车易位(见下文特殊规则) 象 斜向可走任意格数,无阻挡时 只能在同色格子移动,双象分别走黑格和白格 马 走“日”字(先横/竖走2格,再斜走1格;或先横/竖走1格,再斜走2格) 可以跳过其他棋子;不受阻挡 兵 前进规则:
1. 未移动过的兵,第一步可选择走1格或2格
2. 移动过的兵,每次只能走1格
吃子规则:斜向前1格吃对方棋子到达对方底线必须升变(可变为后、车、象、马中的一种) - 特殊行棋规则
- 王车易位:王与未移动过的车之间无其他棋子,且王未被将军、易位路径不被攻击时,王向车方向移动2格,车越过王移动到相邻格。分为短易位(王与王翼车)和长易位(王与后翼车)。
- 吃过路兵:当一方兵从初始位置走2格,恰好与对方兵横向相邻时,对方兵可立即斜向前吃掉这个兵,且停在该兵原本走1格的位置。此操作必须在对方兵走2格的下一步立即执行,过期失效。
- 兵的升变:兵走到对方底线(白兵到第8格,黑兵到第1格)时,必须替换为后、车、象、马中的一种(不能不变,也不能变王),通常优先升变为后。
- 胜负与和棋判定
- 胜负判定
- 将死:一方王被攻击(将军),且无法通过走王、挡子、吃对方攻击棋子的方式解除将军,即为将死,对方获胜。
- 超时负:在规定时间内未走满规定步数,判负。
- 认输负:一方主动认输,对方获胜。
- 违规负:多次违规(如走禁着、触摸棋子后不走该棋子等),判负。
- 和棋判定
- 逼和:一方王未被将军,但所有合法走法都会让王被将军,或无任何合法走法,判和。
- 三次重复局面:同一局面(棋子位置、轮走方、王车易位/吃过路兵权利均相同)重复出现三次,任一方可申请和棋。
- 五十步规则:连续50步内没有吃子和兵的移动,任一方可申请和棋。
- 双方同意和棋:对局中双方协商一致,可判和。
- 无子可胜:双方剩余棋子都无法将死对方(如只剩双王、王+象vs王、王+马vs王),自动和棋。
- 胜负判定
技术栈选型、后端 API、前端路由与走子校验等实现细节,见单独一篇:国际象棋 Web 项目技术实现。
商业价值部分
这个东西的商业价值几乎为零,现有的国际象棋APP,做得再牛逼,像国象联盟这个级别的App,也几乎就是以贩卖周边来作为赢利点。比如卖一下国际象棋的棋盘和棋子等等。
App内购买(IAP)的商业模式,是非常难做起来的,至少对于一个更愿意从技术角度思考问题的人来说,这是难于登天的。
后续烧钱部分
直接花了80多块买了一副39cm * 39cm棋子大小的国际象棋,棋盘也是非常大。不舍得花更多的钱,去买那个橡脂材质的,那个确实是牛逼的,手感看起来就很不错。

还有一些宝可梦周边的国际象棋,收藏类型的玩具,2600块,感觉这也是一条烧钱的路。