Gahotx/Gomoku

局域网联机的五子棋游戏(纯AI生成玩玩)

★ 0Forks 0VueGitHub ↗Compare

README

🎮 五子棋 — 局域网联机对战

基于 Vue 3 + Express + Socket.IO 的局域网联机五子棋游戏,支持人机对战和双人在线对战。

✨ 功能特性

  • 🔗 局域网联机 — 创建房间,通过 6 位房间码邀请好友加入对战
  • 🤖 人机对战 — 三种 AI 难度(简单 / 中等 / 困难),基于 Minimax + α-β 剪枝算法
  • 💬 实时聊天 — 对战中发送文字消息互动
  • ↩️ 悔棋机制 — 联机模式需对方同意,自动撤销两步使回合回到请求方
  • 🔄 重新开始 — 支持再来一局,自动交换先后手
  • 📡 状态同步 — 页面刷新后自动同步服务端状态,防止事件丢失
  • 🔌 断线处理 — 玩家断开连接后自动清理房间并通知对手

🛠 技术栈

层级 技术
前端框架 Vue 3 (Composition API + <script setup>)
状态管理 Pinia
路由 Vue Router 4
构建工具 Vite 5
实时通信 Socket.IO 4
后端框架 Express 4
AI 算法 Minimax + α-β 剪枝,棋型评估
并发工具 concurrently

📁 项目结构

Gomoku/
├── client/                     # 前端项目
│   └── src/
│       ├── views/              # 页面组件
│       │   ├── HomeView.vue    # 首页(创建/加入房间)
│       │   ├── RoomView.vue    # 等待房间
│       │   ├── GameView.vue    # 游戏主页面
│       │   └── JoinView.vue    # 加入房间(路由直达)
│       ├── components/         # 游戏组件
│       │   ├── Board.vue       # 15×15 棋盘
│       │   ├── Stone.vue       # 棋子组件
│       │   ├── GameInfo.vue    # 玩家信息面板
│       │   ├── ChatPanel.vue   # 聊天面板
│       │   ├── ResultModal.vue # 胜负弹窗
│       │   └── UndoDialog.vue  # 悔棋弹窗
│       ├── stores/             # Pinia 状态管理
│       │   ├── game.js         # 游戏状态
│       │   ├── room.js         # 房间状态
│       │   └── chat.js         # 聊天消息
│       ├── ai/                 # AI 算法
│       │   ├── search.js       # Minimax + α-β 剪枝
│       │   └── evaluate.js     # 棋型评估函数
│       ├── game/               # 游戏核心
│       │   ├── board.js        # 棋盘操作
│       │   ├── winCheck.js     # 胜负判定
│       │   └── constants.js    # 常量定义
│       ├── socket.js           # Socket.IO 客户端封装
│       ├── router.js           # 路由配置
│       ├── App.vue
│       └── main.js
├── server/                     # 后端项目
│   ├── index.js                # 服务入口(房间管理、事件处理)
│   ├── game-logic.js           # 纯函数游戏逻辑(供测试复用)
│   └── tests/
│       └── game.test.js        # 游戏逻辑测试
├── package.json                # 根配置(启动脚本)
└── CLAUDE.md                   # Claude Code 项目指引

🚀 快速开始

环境要求

安装与运行

# 1. 安装所有依赖
npm run install:all

# 2. 同时启动前后端开发服务器
npm run dev

# 或者分别启动
npm run dev:server   # 后端 → http://localhost:3000
npm run dev:client   # 前端 → http://localhost:5173

启动后在浏览器中打开 http://localhost:5173,即可开始游戏。

💡 前端开发服务器监听 0.0.0.0,局域网内其他设备可通过本机 IP 地址访问。

运行测试

node server/tests/game.test.js

🎯 使用指南

创建房间

  1. 在首页点击「创建房间」
  2. 选择一个模式(人机对战 或 双人对战)
  3. 人机对战可选择 AI 难度(简单 / 中等 / 困难)
  4. 将 6 位房间码发送给好友

加入房间

  1. 在首页输入 6 位房间码,点击「加入房间」
  2. 或直接访问加入链接:http://localhost:5173/join/<房间码>
  3. 双方进入房间后游戏自动开始

游戏规则

  • 黑方先行,双方轮流落子
  • 先在横、竖、斜任一方向连成 五子 者获胜
  • 棋盘满子且无人获胜则为 平局

操作说明

操作 说明
点击棋盘空格 落子
悔棋按钮 向对手发送悔棋请求
聊天输入框 发送文字消息
重新开始 请求再来一局

🧠 AI 算法

难度 算法 搜索深度
简单 贪心选点 1
中等 Minimax + α-β 剪枝 2
困难 Minimax + α-β 剪枝 4

AI 采用棋型评估函数,从四个方向(水平、垂直、两条对角线)分析连子数和开放端数,对活四、冲四、活三、眠三、活二等棋型进行加权评分。同时通过候选点剪枝(仅考虑已有棋子周围 2 格的空位)大幅减少搜索空间。

🔧 房间码规则

房间码为 6 位大写字母与数字组合,排除了易混淆字符:

  • ❌ 0(数字零) — 与 O 混淆
  • ❌ O(大写字母 O) — 与 0 混淆
  • ❌ 1(数字一) — 与 I/L 混淆
  • ❌ I(大写字母 I) — 与 1/L 混淆
  • ❌ L(大写字母 L) — 与 1/I 混淆

📄 许可证

MIT

Contributors

Gahotx

Issues