无限制象棋是一款突破传统规则束缚的创新型中国象棋游戏。玩家可以通过自然语言指令,实时修改游戏规则、棋盘状态、棋子能力,甚至游戏界面本身。
这不是一款普通的象棋游戏,而是一个规则可塑的、活的游戏系统。
核心创新:采用 jump + ray 双原子移动体系 + where 条件表达式引擎,将所有棋子的移动规则解构为底层可组合的原子操作,使 AI 能够真正修改规则概念本身。
- 自然语言指令:输入"让我的马可以斜着走"、"車变成两个"等指令,AI会自动修改游戏规则
- 实时生效:修改无需重启,立即应用到游戏中
- 多级AI协作:意图解析AI + 代码生成AI,精准理解玩家意图
- 安全稳定:JSON驱动架构,Schema校验,确保修改安全
- AI对战:内置Minimax+Alpha-Beta剪枝算法,支持三档难度
- 自定义棋子:支持创建全新棋子类型,定义独特的移动规则
- 可撤销:所有AI修改都支持撤回,不怕改坏
- Token统计:实时追踪AI调用消耗的Token和费用
┌─────────────────────────────────────────────────────────────┐
│ 前端层 │ HTML5 + CSS3 + 原生 JavaScript (ES2022+) │
├─────────────────────────────────────────────────────────────┤
│ 后端层 │ Python 3.11 + FastAPI + Uvicorn │
├─────────────────────────────────────────────────────────────┤
│ AI层 │ DeepSeek API (Chat + Code 双模式) │
├─────────────────────────────────────────────────────────────┤
│ 规则引擎 │ jump/ray 双原子体系 + where 条件表达式 │
├─────────────────────────────────────────────────────────────┤
│ 存储层 │ 内存状态 + JSON配置文件 + 撤销栈 │
└─────────────────────────────────────────────────────────────┘
unlimited_chess/
├── main.py # FastAPI主服务器
├── ai_orchestrator.py # AI编排器(核心)
├── rule_engine.py # 象棋规则引擎(jump/ray原子体系)
├── chess_ai.py # AI下棋引擎(Minimax + Alpha-Beta)
├── prompts.py # AI提示词定义
├── schema_validator.py # JSON Schema校验器
├── json_patch_utils.py # JSON Patch工具
├── configs/ # JSON配置文件
│ ├── board.json # 棋盘几何定义与渲染配置
│ ├── pieces.json # 棋子移动原语定义(jump + ray)
│ ├── rules.json # 游戏规则定义(可执行条件树)
│ ├── board_state.json # 棋盘运行时状态(棋子实例位置)
│ ├── ui_config.json # 界面配置
│ ├── initial/ # 初始备份(用于重置)
│ └── schemas/ # JSON Schema校验文件
├── static/ # 前端文件
│ ├── index.html # 主页面
│ ├── style.css # 样式表
│ └── app.js # 前端应用
├── tests/ # 测试文件
└── requirements.txt # Python依赖
- Python 3.11+
- pip
pip install -r requirements.txt或手动安装:
pip install fastapi uvicorn httpx jsonschema- 访问 DeepSeek官网
- 注册账号并获取API Key
- 首次运行游戏时,在设置中输入API Key
cd unlimited_chess
python main.py打开浏览器访问:http://localhost:8000
- 走棋:点击棋子选中,再点击目标位置移动
- 悔棋:点击"悔棋"按钮回退一步(同时回退AI的一步)
- 重新开始:点击"重新开始"重置棋盘
- 撤回AI修改:如果对AI的修改不满意,点击"撤回AI修改"按钮
在底部输入框输入指令,例如:
| 指令类型 | 示例 | 效果 |
|---|---|---|
| 规则修改 | "让我的马可以斜着走" | 马增加斜向移动能力 |
| 规则修改 | "象可以过河" | 取消象的过河限制 |
| 规则修改 | "炮需要隔两个子才能吃" | 修改炮的炮架数量 |
| 规则修改 | "兵可以后退" | 兵增加后退能力 |
| 棋盘变换 | "复制一个車到[3,3]" | 在指定位置添加新車 |
| 棋盘变换 | "把[0,0]的車移到[4,4]" | 移动指定棋子 |
| 界面修改 | "把棋盘背景改成蓝色" | 修改棋盘颜色 |
| 创建棋子 | "创建一个可以斜走两格的棋子叫'象王'" | 创建全新自定义棋子 |
| 娱乐 | "把棋盘掀了" | AI幽默回复 |
棋盘的几何定义和视觉渲染配置,包含:
geometry:棋盘几何属性width/height:棋盘行列数river_line:河界位置palace:九宫格定义(红方/黑方)regions:自定义区域(如红方阵地、黑方阵地)
appearance:视觉渲染配置grid:网格线设置palace:九宫格显示设置river:楚河汉界设置layout:布局边距、尺寸decorations:装饰元素(边框、自定义线条等)
使用 jump + ray 两种原子移动原语定义所有棋子的移动规则:
pieces:预定义棋子(general, advisor, elephant, horse, chariot, cannon, soldier)label:棋子显示名称(红/黑)is_king:是否为将帅类棋子moves:移动规则数组kind:jump(离散跳跃)或ray(射线滑行)to:jump的目标偏移(dx, dy)dir:ray的方向向量(dx, dy)max:ray的最大步数(-1为无限)screens:ray需跳过的棋子数(炮架机制)block:jump的关卡格(必须为空,如马腿、象眼)land:落点要求(empty/enemy/any)sym:对称展开(none/rotate4/rotate4_mirror/mirror_x)where:条件表达式列表(额外约束)
custom_pieces:自定义棋子数组side_overrides:阵营级规则覆盖(red/black)
游戏胜利条件、特殊规则、AI难度等:
win_conditions:胜利条件(将死、困毙、吃帅等)special_rules:特殊规则(飞将等)turn_rules:回合规则ai_difficulty:AI难度设置(easy/medium/hard)
当前游戏的实时状态:
pieces:所有棋子实例(id, type, name, side, position, is_alive)current_turn:当前回合(red/black)move_history:移动历史(用于悔棋)game_status:游戏状态(进行中/结束/胜者)
theme:颜色主题custom_css:自定义CSScustom_js:自定义JavaScript
- 模型: DeepSeek-Chat
- 职责: 理解玩家自然语言,分类意图,生成结构化指令
- 分类体系:
- A类:悔棋/输赢控制(硬代码实现)
- B类:棋盘变换(修改棋子状态/位置)
- C类:规则修改(修改棋子移动规则)
- C+类:自定义棋子创建
- B+C类:混合类型(棋盘变换+规则修改)
- D类:界面修改(D1配置文件 / D2 HTML结构)
- E类:纯搞笑/娱乐
- F类:高级/不可行
- 模型: DeepSeek-Code
- 职责: 根据结构化指令生成JSON Patch或HTML修改
- 分类专家: 棋盘变换AI / 规则修改AI / 界面修改AI / 搞笑回复AI
- 输出格式: 优先输出 RFC 6902 标准的 JSON Patch 数组
- JSON Schema验证:所有AI生成的JSON都经过Draft7 Schema校验
- 字段保护:关键字段(如
_metadata)有额外保护 - 范围检查:坐标必须在棋盘范围内,棋子类型必须合法
- 撤销机制:所有AI修改都进入撤销栈,玩家可随时撤回
- 重试机制:AI输出格式错误时自动重试,最多3次
- 基础象棋功能
- AI对战(Minimax + Alpha-Beta)
- 自然语言指令解析
- 规则修改系统(C类)
- 棋盘变换系统(B类)
- 界面修改系统(D类)
- 自定义棋子创建(C+类)
- JSON Patch 优先输出
- Token消耗统计
- jump/ray 双原子规则引擎
- where 条件表达式引擎
- WebSocket实时通信
- 多人对战
- 更多棋子类型
MIT License