Skip to content
This repository was archived by the owner on Apr 8, 2026. It is now read-only.

HitMargin/chinese-chess

Repository files navigation

中国象棋 - 智能版

一个功能完整的中国象棋游戏,支持 AI 对弈、难度调节、胜率显示、威胁预警等高级功能。

功能特色

核心功能

  • 🏆 双人对弈 & 人机对战
  • 🤖 智能 AI,基于 Alpha-Beta 剪枝算法
  • ✨ 流畅的棋子移动动画
  • 🔊 音效系统(移动、吃子、将军、胜负)

AI 增强功能

  • 难度调节: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 install

开发模式

npm run dev
#
bun run dev

然后在浏览器中打开 http://localhost:3000

构建生产版本

npm run build

产物将输出到 dist/ 目录。

游戏说明

基本操作

  • 点击己方棋子选中,再点击目标格子移动
  • 选中后再次点击另一己方棋子可切换选中
  • 使用"自动"按钮让 AI 自动对弈

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

About

智能中国象棋游戏 - AI对弈、难度调节、实时胜率

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors