一个功能完整的中国象棋游戏,支持 AI 对弈、难度调节、胜率显示、威胁预警等高级功能。
- 🏆 双人对弈 & 人机对战
- 🤖 智能 AI,基于 Alpha-Beta 剪枝算法
- ✨ 流畅的棋子移动动画
- 🔊 音效系统(移动、吃子、将军、胜负)
- 难度调节:1-4 级可调(新手→困难),通过滑动条实时调整 AI 思考深度
- 着法提示:高亮显示选中棋子可以攻击的敌方棋子
- 威胁预警:红色边框预警对方下一步可能将军的线路
- 位置价值:车在开阔线加分、马在中心加分等人类棋理
- 胜率显示:实时计算并显示双方胜率百分比
- 残局识别:自动检测残局状态并调整评估策略
- 胜负标注:游戏结束时显示胜利方和致败原因分析
- 🎨 四种配色方案:经典、现代、暗色、木纹
- 📋 AI 思考日志:记录每一步的评估分数和变化
- ↩️ 悔棋功能:最多保存 50 步历史
- ✎ 编辑模式:自由摆放棋子,创建残局
- 🔄 新局、暂停、继续等完整控制
中国象棋/
├── Main.html # 主页面(使用 ES6 模块)
├── src/
│ ├── Game.ts # 游戏核心逻辑(状态管理)
│ ├── Renderer.ts # Canvas 渲染器
│ ├── UIController.ts # UI 交互控制
│ ├── ai.ts # AI 引擎(评估、搜索)
│ ├── rules.ts # 象棋规则(移动、将军检测)
│ ├── constants.ts # 常量(棋盘、棋子价值、位置表)
│ ├── types.ts # TypeScript 类型定义
│ └── audio.ts # 音效系统
├── package.json # 项目配置
├── tsconfig.json # TypeScript 配置
└── vite.config.ts # Vite 开发服务器配置
# 使用 npm
npm install
# 或使用 bun
bun installnpm run dev
# 或
bun run dev然后在浏览器中打开 http://localhost:3000
npm run build产物将输出到 dist/ 目录。
- 点击己方棋子选中,再点击目标格子移动
- 选中后再次点击另一己方棋子可切换选中
- 使用"自动"按钮让 AI 自动对弈
使用难度滑动条调节 AI 思考深度:
- 1 层:新手,响应快但水平有限
- 2 层:简单,适合休闲对弈
- 3 层:普通,标准难度(默认)
- 4 层:困难,强 AI,计算深入
- 绿色圆圈:当前选中棋子可以移动到的位置
- 黄色光晕:当前选中棋子
- 红色边框:预警,表示该位置或线路可能导致被将军
- 日志面板:显示 AI 每一步的评估分数和领先优势
- 前端框架:原生 TypeScript + Canvas API(无框架依赖)
- 构建工具:Vite(开发热更新 + 生产构建)
- AI 算法:Alpha-Beta 剪枝 + 位置价值评估 + 开局随机性
- 模块化:完全 TypeScript 模块化,易于维护和扩展
评估 = 棋子价值 + 位置价值 + 随机扰动
棋子价值(部分):
- 帅/将:10000
- 车:100
- 炮:50
- 马:45
- 仕/士:20
- 相/象:20
- 兵/卒:12
位置价值表包含 10×9 网格,为每种棋子定义在不同位置的分值加成。
使用 S 型曲线(logistic function)将局面分数转换为胜率:
winRate = 1 / (1 + exp(-k * score))
其中 k = 0.003,将分数映射到 0-100%。
getAttackedPieces()找出当前玩家可以攻击的所有敌方棋子getThreateningMoves()找出当前玩家所有能直接攻击对方将帅的着法- 在 render 阶段用红色边框突出显示对方下一步可能的将军位置
MIT License