Skip to content

withRiver/gomoku-ai

Repository files navigation

Gomoku AI

一个功能完整的五子棋Web应用,支持人机对战、AI对战、本地AI算法等多种游戏模式。

功能特性

游戏模式

  • PVP(玩家对战) - 本地双人对战
  • PVAI(人机对战) - 与AI对手对战
  • AIVAI(AI对战) - 观看两个AI互相对战

AI 对手

本地AI(无需网络)

  1. Minimax Bot (本地)

    • 基于Minimax算法 + Alpha-Beta剪枝
    • 固定搜索深度2层,响应速度快(< 1秒)
    • 智能识别立即获胜和阻止机会
    • 使用模式识别的评估函数(活四、冲四、活三等)
    • 适合快速对局和入门玩家
  2. MCTS Bot (本地)

    • 基于蒙特卡洛树搜索(Monte Carlo Tree Search)
    • 使用UCT(Upper Confidence Bound for Trees)选择策略
    • 固定思考时间5秒,自适应搜索深度
    • 通过随机模拟评估局面
    • 适合寻求挑战的玩家

云端AI(需要API Token)

  • Qwen Thinking - 支持推理过程展示
  • Qwen Instruct - 快速指令模式
  • DeepSeek - 深度思考模式
  • Kimi - 另一个云端AI选择

核心功能

  • 棋盘交互 - 15x15标准五子棋棋盘,点击落子
  • 悔棋功能 - 支持撤销上一步操作
  • 游戏历史 - 自动保存对局记录,支持回放
  • 胜负判定 - 自动检测五连珠并展示获胜者
  • 设置管理 - AI模型选择、API Token配置
  • 数据持久化 - 使用IndexedDB本地存储游戏记录和配置

技术栈

前端框架

  • React 18 - UI框架
  • TypeScript - 类型安全
  • Vite - 构建工具
  • Emotion - CSS-in-JS样式方案
  • Framer Motion - 动画效果

状态管理

  • Zustand - 轻量级全局状态管理
  • React Hooks - 组件级状态管理

数据存储

  • Dexie.js - IndexedDB封装库,用于游戏历史存储
  • localStorage - 用户设置和配置存储

AI算法实现

  • Minimax算法 - 经典博弈树搜索(src/core/ai/providers/SearchBotProvider.ts
  • Alpha-Beta剪枝 - 优化搜索效率
  • MCTS算法 - 蒙特卡洛树搜索(src/core/ai/providers/MCTSBotProvider.ts
  • UCT选择策略 - 平衡探索与利用
  • 模式评估 - 五连、活四、冲四、活三等棋型识别

网络请求

  • Axios - HTTP客户端,用于云端AI调用

测试

  • Vitest - 单元测试框架
  • Playwright - E2E测试(配置)

项目结构

gomoku-ai/
├── src/
│   ├── core/                    # 核心业务逻辑
│   │   ├── ai/                  # AI相关
│   │   │   ├── providers/       # AI提供者实现
│   │   │   │   ├── SearchBotProvider.ts   # Minimax算法
│   │   │   │   ├── MCTSBotProvider.ts     # MCTS算法
│   │   │   │   ├── MockAIProvider.ts      # Mock AI
│   │   │   │   └── venus/                  # 云端AI适配器
│   │   │   ├── AIManager.ts     # AI管理器
│   │   │   ├── AIProvider.ts    # AI提供者接口
│   │   │   └── types.ts         # AI类型定义
│   │   ├── game/                # 游戏逻辑
│   │   │   ├── Player.ts        # 玩家类
│   │   │   ├── WinDetector.ts   # 胜负判定
│   │   │   └── types.ts         # 游戏类型定义
│   │   └── storage/             # 数据持久化
│   │       ├── ConfigStore.ts   # 配置存储
│   │       ├── GameDatabase.ts  # 游戏数据库
│   │       └── types.ts         # 存储类型定义
│   ├── ui/                      # UI组件
│   │   ├── components/
│   │   │   ├── Board/           # 棋盘组件
│   │   │   ├── GameControls/    # 游戏控制
│   │   │   ├── History/         # 历史记录
│   │   │   ├── Settings/        # 设置面板
│   │   │   └── Common/          # 通用组件
│   │   ├── pages/
│   │   │   └── GamePage.tsx     # 游戏主页面
│   │   ├── stores/
│   │   │   └── gameStore.ts     # 游戏状态管理
│   │   └── styles/
│   │       └── theme.ts         # 主题配置
│   ├── utils/                   # 工具函数
│   ├── App.tsx                  # 应用根组件
│   └── main.tsx                 # 应用入口
├── tests/                       # 测试文件
│   └── unit/
│       └── SearchBotProvider.test.ts
├── openspec/                    # OpenSpec规范文档
│   ├── specs/                   # 规范定义
│   └── changes/                 # 变更记录
├── index.html                   # HTML入口
├── package.json                 # 项目配置
├── tsconfig.json                # TypeScript配置
└── vite.config.ts               # Vite配置

快速开始

环境要求

  • Node.js >= 18
  • npm >= 9

安装依赖

npm install

开发模式

npm run dev

访问 http://localhost:5173 查看应用。

构建生产版本

npm run build

构建产物位于 dist/ 目录。

预览生产版本

npm run preview

开发命令

代码检查

# ESLint检查
npm run lint

# TypeScript类型检查
npm run type-check

# 代码格式化
npm run format

测试

# 运行单元测试
npm test

# 运行测试UI界面
npm run test:ui

# 运行E2E测试
npm run test:e2e

使用说明

开始游戏

  1. 选择游戏模式(PVP/PVAI/AIVAI)
  2. 如果选择AI模式,在设置中选择AI对手
  3. 点击"开始游戏"按钮
  4. 在棋盘上点击落子

使用本地AI

本地AI(Minimax Bot和MCTS Bot)无需任何配置,直接选择即可使用:

  1. 点击"设置"按钮
  2. 在"AI模型选择"中选择"Minimax Bot (本地)"或"MCTS Bot (本地)"
  3. 开始游戏

使用云端AI

云端AI需要配置API Token:

  1. 点击"设置"按钮
  2. 在"Venus API配置"中输入你的API Token
  3. 在"AI模型选择"中选择云端AI(Qwen、DeepSeek等)
  4. 开始游戏

查看历史记录

  1. 点击"历史记录"按钮
  2. 选择要查看的对局
  3. 使用回放控制查看棋谱

AI算法详解

Minimax Bot

算法原理:

  • 使用Minimax算法递归搜索博弈树
  • Alpha-Beta剪枝减少搜索节点(效率提升50%+)
  • 固定搜索深度2层(每方向前看1步)
  • 移动排序优化剪枝效率

优化特性:

  • 立即获胜检测 - 搜索前先检查是否有一步获胜的棋
  • 立即阻止检测 - 检查对手是否有一步获胜的威胁
  • 模式评估 - 识别活四(10000分)、冲四(5000分)、活三(1000分)等棋型
  • 防守权重 - 对手威胁权重 × 1.1,鼓励防守

性能指标:

  • 响应时间:< 1秒
  • 搜索节点数:通常 < 1000节点
  • 适合场景:快速对局、学习五子棋基本战术

MCTS Bot

算法原理:

  • 蒙特卡洛树搜索(Monte Carlo Tree Search)
  • UCT选择策略(Upper Confidence Bound for Trees)
  • 时间限制:5秒思考时间
  • 随机模拟(Random Playout)评估局面

算法流程:

  1. 选择(Selection) - 使用UCT公式选择最优子节点
  2. 扩展(Expansion) - 到达叶节点后扩展所有合法着法
  3. 模拟(Simulation) - 随机走棋直到游戏结束
  4. 回溯(Backpropagation) - 将结果反向传播更新节点统计

UCT公式:

UCT = win_rate + C × √(ln(parent_visits) / node_visits)
  • C = √2 (探索常数)
  • win_rate - 胜率(利用项)
  • 后项 - 探索奖励(探索项)

性能指标:

  • 响应时间:~5秒
  • 模拟次数:通常数千到数万次模拟
  • 适合场景:追求更强棋力的玩家

配置说明

API Token配置

云端AI使用Venus API,需要配置Token:

// 在设置面板中输入,或通过localStorage设置
localStorage.setItem('venus_api_token', 'your-token-here');

AI模型配置

支持的AI模型ID:

  • 'mock' - Mock AI(测试用)
  • 'search-bot' - Minimax Bot
  • 'mcts-bot' - MCTS Bot
  • 'qwen-thinking' - Qwen推理模式
  • 'qwen-instruct' - Qwen指令模式
  • 'deepseek' - DeepSeek
  • 'kimi' - Kimi

OpenSpec规范

本项目使用OpenSpec进行需求管理和变更追踪:

  • 规范文档 - openspec/specs/
  • 变更记录 - openspec/changes/archive/
  • 已归档变更
    • 2025-12-17-add-search-bot - 添加Minimax搜索Bot
    • 2025-12-17-update-bots-add-mcts - 移除难度选择,添加MCTS Bot

查看规范:

openspec list --specs
openspec show ai-providers

贡献指南

欢迎提交Issue和Pull Request!

开发流程

  1. Fork本项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交代码 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 提交Pull Request

代码规范

  • 使用TypeScript,保持类型安全
  • 遵循ESLint规则
  • 使用Prettier格式化代码
  • 编写单元测试覆盖核心逻辑

许可证

MIT License

作者

Radian

更新日志

v1.0.0 (2025-12-17)

新增功能:

  • 完整的五子棋游戏逻辑
  • PVP、PVAI、AIVAI三种游戏模式
  • Minimax Bot(本地AI)
  • MCTS Bot(本地AI)
  • 云端AI集成(Venus API)
  • 游戏历史记录和回放
  • 悔棋功能
  • 设置管理

优化:

  • Minimax Bot添加立即获胜/阻止检测
  • 固定Minimax搜索深度为2层(性能优化)
  • MCTS使用5秒固定思考时间

技术亮点

  1. 纯TypeScript实现的AI算法 - Minimax和MCTS完全本地运行,无需服务器
  2. 优秀的性能 - Alpha-Beta剪枝和移动排序优化搜索效率
  3. 模块化架构 - AIProvider接口支持轻松扩展新AI算法
  4. 完整的类型系统 - TypeScript严格模式,类型安全
  5. 现代化UI - Emotion CSS-in-JS + Framer Motion动画
  6. 数据持久化 - IndexedDB + localStorage实现完整数据存储
  7. OpenSpec规范管理 - 使用OpenSpec进行需求和变更管理

常见问题

Q: Minimax Bot为什么只搜索2层?

A: 测试发现更深的搜索(depth 4, 6)会导致频繁超时。depth 2在性能和棋力间取得良好平衡,响应时间 < 1秒。

Q: MCTS Bot和Minimax Bot哪个更强?

A: MCTS Bot通常更强,因为它有更多思考时间(5秒 vs < 1秒),能探索更深的变化。但Minimax Bot响应更快,适合快速对局。

Q: 如何添加新的AI算法?

A: 实现AIProvider接口,然后在AIManager中注册即可:

// 1. 实现AIProvider接口
export class MyBotProvider implements AIProvider {
  readonly id: AIModelId = 'my-bot';
  readonly displayName = 'My Bot';
  
  async generateMove(request: AIRequest): Promise<AIResponse> {
    // 你的算法实现
  }
  
  // ... 其他方法
}

// 2. 在AIManager中注册
this.registerProvider(new MyBotProvider());

Q: 游戏历史保存在哪里?

A: 使用IndexedDB存储在浏览器本地,数据库名为gomoku-db。清除浏览器数据会删除历史记录。

Q: 支持移动端吗?

A: UI使用响应式设计,支持移动端浏览器访问,但体验在桌面端更佳。

反馈与支持

如有问题或建议,请提交Issue或联系作者。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors