采用纯 HTML5 Canvas 实现,无需任何网络连接或插件,直接在浏览器中运行。它既支持双人对弈,也提供三种难度的人机对战,适合象棋爱好者练习或休闲娱乐。一、核心功能
- 双人对战:两人轮流使用同一设备,红方先行,黑方后行,完全遵循中国象棋标准规则。
- 人机对战:可选择让 AI 执红或执黑,自己执另一方,与电脑对弈。
- 三种难度:初级(1层搜索深度)、中级(2层)、高级(3层),层数越高 AI 思考更深入,棋力越强。
- 悔棋功能:可回退到上一回合的局面,方便复盘或纠正失误。
- 新局重开:随时重置棋盘,开始全新对局。
二、界面设计
- 棋盘绘制:采用传统木质色调,楚河汉界清晰,九宫对角线、炮/兵标记点均完整呈现。
- 棋子样式:红方棋子为暗红色底、金色文字;黑方为深色底、浅色文字,文字采用楷体,带有立体阴影,视觉上非常典雅。
- 选中高亮:当点击己方棋子时,棋子周围会出现金色光圈,提示当前选中状态。
- 右侧面板:
- 走棋提示:显示当前轮到红方还是黑方走棋,对局结束后显示胜方。
- 模式选择:下拉菜单可选“双人对战”、“AI执黑”、“AI执红”。
- 难度选择:初级、中级、高级对应不同的搜索深度。
- 悔棋按钮:点击后退一步。
- 新局按钮:立即重置棋盘。
三、规则实现游戏严格实现了中国象棋的全部基本规则:
- 棋子走法:
- 帅(将):只在九宫内直走一步。
- 士(仕):只在九宫内斜走一步。
- 相(象):飞“田”,不能过河,且需避免象眼被塞。
- 马:走“日”字,有蹩马腿限制。
- 车:直线任意距离,不可越过棋子。
- 炮:直线行走,吃子时必须隔一棋子(炮架)。
- 兵(卒):未过河只能前进,过河后可横移,不可后退。
- 特殊规则:
- 将帅不能照面(双方将/帅之间无棋子阻挡时判为禁止走法)。
- 走棋后不能使己方将/帅处于被攻击状态(即不能送将)。
- 胜负判定:吃掉对方将/帅即获胜。程序会在每次移动后检测对方将/帅是否存在。
四、AI 设计
- 搜索算法:采用带 Alpha-Beta 剪枝的博弈树搜索,深度由用户选择(1~3层)。
- 优化技巧:
- 杀手启发式:记录每层搜索中导致剪枝的非吃子走法,优先尝试这些走法以提高剪枝效率。
- 走法排序:先尝试杀手走法,再按吃子价值(MVV-LVA)排序,提高剪枝效果。
- 局面评估:基于棋子基本价值(帅10000、车1000、马500、炮800、相/士200、兵/卒100),计算双方总分差。
- 随机性:当多个走法评分相同时,随机选择一个,使 AI 棋路略有变化。
五、操作方式
- 选择棋子:点击棋盘上的己方棋子,该棋子会高亮。
- 移动棋子:再点击一个合法的目标格,棋子即移动。若目标格有敌方棋子则吃掉。
- 取消选择:点击空白区域或再次点击同一棋子可取消选中。
- 按钮操作:点击右侧按钮执行对应功能,所有操作均有实时反馈。
六、技术实现亮点
- Canvas 锐化处理:所有线条和文字均采用半像素坐标绘制,消除模糊,在视网膜屏幕下依然清晰。
- 响应式布局:棋盘尺寸固定,但通过 CSS 居中显示,适配不同分辨率。
- 无外部依赖:纯原生 JavaScript,无任何第三方库,加载即用。
- 历史记录:每次走棋都会保存局面,实现悔棋功能。
七、适用场景
- 闲暇时与朋友对弈一局。
- 初学者练习走法,熟悉规则。
- 象棋爱好者与 AI 切磋,逐步挑战更高难度。
- 无需网络,随时在电脑或平板浏览器上打开即玩。
演示地址:中国象棋专业版2.0