diff --git "a/\346\232\221\346\234\237\351\233\206\350\256\255/07\351\241\271\347\233\256\346\226\207\346\241\243/API\350\256\276\350\256\241\346\226\207\346\241\243.md" "b/\346\232\221\346\234\237\351\233\206\350\256\255/07\351\241\271\347\233\256\346\226\207\346\241\243/API\350\256\276\350\256\241\346\226\207\346\241\243.md" new file mode 100644 index 0000000000000000000000000000000000000000..738e77f6722741fc894213ff7977707c984c332f --- /dev/null +++ "b/\346\232\221\346\234\237\351\233\206\350\256\255/07\351\241\271\347\233\256\346\226\207\346\241\243/API\350\256\276\350\256\241\346\226\207\346\241\243.md" @@ -0,0 +1,346 @@ +# 📘 多人实时涂色抢地盘游戏 — API 设计文档 + +--- + +## 🎮 一、项目概述 + +### 项目名称: +**多人实时涂色抢地盘游戏** + +### 项目类型: +基于 Web 的多人实时竞技休闲类 Canvas 游戏 + +### 核心玩法: +2~6 名玩家在同一画布上使用各自分配的专属颜色进行涂色,**不能覆盖其他玩家已涂区域**,最终根据**占领画布面积最大**来决定胜负。 + +--- + +## 🏗️ 二、技术架构简述 + +| 层级 | 技术栈 | +|------|--------| +| **前端** | Vue 3 + Canvas API + Socket.io-client / HTTP | +| **后端** | ASP.NET Core 8 (Minimal APIs) + SignalR + Redis + PostgreSQL | +| **通信协议** | HTTP(RESTful API,用于房间管理)
WebSocket(SignalR,用于实时绘图、状态同步、倒计时、游戏流程控制) | + +--- + +## 📡 三、API 分类 + +本文档包含以下两类 API 设计: + +1. **HTTP RESTful API**(主要用于房间管理、游戏状态查询、用户管理等) +2. **WebSocket 实时 API(SignalR Hub)**(主要用于实时绘图同步、倒计时推送、游戏流程控制、玩家状态同步) + +--- + +# 🌐 第一部分:HTTP RESTful API 设计(后端) + +> 主要用于:房间管理、游戏配置、基础信息查询等 **非实时操作** + +### 基础信息 + +- **Base URL**: `https://yourdomain.com/api/` (可配置) +- **Content-Type**: `application/json` +- **认证方式**: 暂未设计(可后续加入 JWT / Token,当前假设为开放式房间) + +--- + +## 1. 🏠 房间管理 API + +### 1.1 创建房间 + +**POST** `/api/rooms` + +#### 请求参数(JSON Body): + +```json +{ + "roomCode": "ABC123", // 可选,玩家自定义房间号 + "playerName": "Alice", // 玩家昵称 + "password": "123456" // 可选,房间密码 +} +``` + +#### 响应(成功 200 Created): + +```json +{ + "roomId": 1, + "roomCode": "ABC123", + "playerId": 101, + "playerName": "Alice", + "status": "Waiting", + "message": "房间创建成功,请等待其他玩家加入" +} +``` + +#### 错误情况: + +- 400:参数无效 / 房间号已存在 +- 500:服务器错误 + +--- + +### 1.2 加入房间 + +**POST** `/api/rooms/join` + +#### 请求参数(JSON Body): + +```json +{ + "roomCode": "ABC123", + "playerName": "Bob", + "password": "123456" // 如果房间设置了密码 +} +``` + +#### 响应(成功 200 OK): + +```json +{ + "roomId": 1, + "roomCode": "ABC123", + "playerId": 102, + "playerName": "Bob", + "status": "Waiting", + "message": "成功加入房间" +} +``` + +#### 错误码: + +- 404:房间不存在 +- 403:房间已满 / 密码错误 / 游戏已开始 +- 400:参数错误 + +--- + +### 1.3 获取房间信息(可选) + +**GET** `/api/rooms/{roomId}` + +#### 响应示例: + +```json +{ + "roomId": 1, + "roomCode": "ABC123", + "players": [ + { "playerId": 101, "playerName": "Alice", "isReady": false }, + { "playerId": 102, "playerName": "Bob", "isReady": true } + ], + "gameStatus": "Waiting", // Waiting / Playing / Finished + "timeLeft": 30 +} +``` + +--- + +## 2. 📊 游戏结果 API(可选,也可通过 WebSocket 推送) + +### 2.1 获取游戏结果(房间结束后调用) + +**GET** `/api/games/result?roomId=1` + +#### 响应示例: + +```json +{ + "roomId": 1, + "roomCode": "ABC123", + "winningPlayerName": "Alice", + "winningScore": 42, + "players": [ + { "playerName": "Alice", "score": 42, "isWinner": true }, + { "playerName": "Bob", "score": 23, "isWinner": false } + ], + "playedAt": "2024-06-01T12:00:00Z" +} +``` + +> 🎯 **推荐:游戏结果更推荐通过 SignalR 实时推送,此接口可作为备选或重播查询使用** + +--- + +# 🔄 第二部分:WebSocket 实时 API(SignalR Hub) + +> 主要用于:**实时绘图同步、游戏状态管理、倒计时推送、玩家加入/离开、绘制动作广播** + +--- + +## 🧩 SignalR Hub 路径 + +- **Hub URL(前端连接地址)**: `/gameHub` (可配置) +- **通信协议**: WebSocket(通过 SignalR) + +> 前端使用 https://docs.microsoft.com/en-us/aspnet/core/signalr/javascript-client 与后端 Hub 通信 + +--- + +## 1. 🧩 Hub 方法 / 事件概览 + +| 类型 | 名称 | 说明 | +|------|------|------| +| ✅ 客户端 → 服务端 | `JoinRoom` | 玩家加入房间 | +| ✅ 客户端 → 服务端 | `SendDrawAction` | 发送绘制点(坐标、颜色、玩家ID) | +| ✅ 服务端 → 客户端 | `BroadcastDrawAction` | 广播其他玩家的绘制动作 | +| ✅ 服务端 → 客户端 | `GameStateChanged` | 推送游戏状态变更(准备/游戏中/结算) | +| ✅ 服务端 → 客户端 | `CountdownUpdated` | 推送倒计时更新 | +| ✅ 服务端 → 客户端 | `GameResultAnnounced` | 推送游戏结果(排名、获胜者) | +| ✅ 服务端 → 客户端 | `PlayerJoined` / `PlayerLeft` | 玩家进入 / 离开房间通知 | + +--- + +## 2. 📡 详细实时事件设计 + +### 2.1 玩家加入房间 + +#### 客户端调用(示例): + +```javascript +connection.invoke("JoinRoom", { + roomId: 1, + playerName: "Alice", + playerId: 101 +}); +``` + +#### 服务端广播: + +- 事件名:`PlayerJoined` +- 内容:`{ playerName: "Alice", playerId: 101 }` +- 推送给房间内其他所有玩家 + +--- + +### 2.2 玩家绘制动作(实时同步) + +#### 客户端发送绘制点: + +```javascript +connection.invoke("SendDrawAction", { + x: 100, + y: 200, + color: "#FF0000", + playerId: 101 +}); +``` + +#### 服务端广播给其他玩家: + +- 事件名:`BroadcastDrawAction` +- 内容: +```json +{ + "x": 100, + "y": 200, + "color": "#FF0000", + "playerId": 101 +} +``` + +--- + +### 2.3 游戏状态变更 + +#### 服务端推送: + +- 事件名:`GameStateChanged` +- 内容: +```json +{ + "gameState": "Playing" // 或 "Waiting", "Finished" +} +``` + +--- + +### 2.4 倒计时更新 + +#### 服务端推送: + +- 事件名:`CountdownUpdated` +- 内容: +```json +{ + "phase": "Game", // "Preparing", "Game", "Finishing" + "timeLeftSeconds": 25 +} +``` + +--- + +### 2.5 游戏结果推送 + +#### 服务端推送: + +- 事件名:`GameResultAnnounced` +- 内容: +```json +{ + "winningPlayerName": "Alice", + "winningScore": 42, + "players": [ + { "playerName": "Alice", "score": 42, "isWinner": true }, + { "playerName": "Bob", "score": 23, "isWinner": false } + ] +} +``` + +--- + +## 3. 🧩 SignalR 客户端连接示例(前端) + +```javascript +const connection = new signalR.HubConnectionBuilder() + .withUrl("https://yourdomain.com/gameHub") + .build(); + +await connection.start(); +await connection.invoke("JoinRoom", { roomId: 1, playerName: "Alice", playerId: 101 }); + +connection.on("BroadcastDrawAction", (data) => { + // 在 Canvas 上绘制其他玩家的点 +}); + +connection.on("GameStateChanged", (state) => { + console.log("游戏状态变更为:", state); +}); + +connection.on("CountdownUpdated", (data) => { + console.log(`倒计时 - ${data.phase}: ${data.timeLeftSeconds}s`); +}); +``` + +--- + +## ✅ 四、安全与扩展建议 + +| 类别 | 建议 | +|------|------| +| 🔐 **认证与授权** | 当前为开放式设计,可后续接入 JWT / Token 验证玩家身份 | +| 🧩 **扩展 API** | 可增加聊天系统 API、观战模式接口、房间设置接口等 | +| 📊 **数据持久化 API** | 可提供游戏历史记录查询、玩家排行榜接口 | +| 🌍 **跨域支持** | 确保 API 支持 CORS,特别是前端与后端域名不同的情况 | +| 🧪 **接口测试** | 推荐使用 Swagger / OpenAPI 文档 + Postman 进行测试 | + +--- + +## 📌 五、总结 + +| 类型 | 协议 | 用途 | +|------|------|------| +| **HTTP RESTful API** | HTTPS | 房间管理、游戏信息查询、结果获取 | +| **WebSocket 实时 API** | SignalR over WebSocket | 实时绘图同步、游戏状态、倒计时、玩家同步 | + +--- + +🚀 **通过本 API 设计文档,前端与后端团队可以清晰对接:** + +- 如何创建 / 加入房间(HTTP) +- 如何同步绘制动作、游戏状态、倒计时、结果(SignalR / WebSocket) +- 如何扩展功能如聊天、观战、历史记录等 + +--- \ No newline at end of file diff --git "a/\346\232\221\346\234\237\351\233\206\350\256\255/07\351\241\271\347\233\256\346\226\207\346\241\243/Git\345\267\245\344\275\234\346\265\201\350\247\204\350\214\203.md" "b/\346\232\221\346\234\237\351\233\206\350\256\255/07\351\241\271\347\233\256\346\226\207\346\241\243/Git\345\267\245\344\275\234\346\265\201\350\247\204\350\214\203.md" new file mode 100644 index 0000000000000000000000000000000000000000..0e6bda60e79d526d1bf6007f620199edcea92c67 --- /dev/null +++ "b/\346\232\221\346\234\237\351\233\206\350\256\255/07\351\241\271\347\233\256\346\226\207\346\241\243/Git\345\267\245\344\275\234\346\265\201\350\247\204\350\214\203.md" @@ -0,0 +1,22 @@ +# Git工作流规范 + +## 分支管理 +- 主分支(master):仅用于发布正式版本 +- 开发分支(dev):日常开发集成,所有功能分支合并到此 +- 功能分支(feature/xxx):开发新功能,完成后合并到 dev +- 修复分支(fix/xxx):修复 bug,完成后合并到 dev +- 发布分支(release/xxx):预发布测试,合并到 main 和 dev + +## 提交规范 +- 格式:<类型>: <描述> +- 类型示例:feat(新功能)、fix(修复)、docs(文档)、refactor(重构)、test(测试)、chore(杂项) +- 示例:feat: 新增角色管理页面 + +## 合并流程 +1. 功能开发完成后,提交 Pull Request 到 dev 分支 +2. 由团队成员进行代码评审 +3. 通过后合并,删除功能分支 + +## 代码审查 +- 每次合并需至少一人审核 +- 重点关注安全、性能、可维护性 diff --git "a/\346\232\221\346\234\237\351\233\206\350\256\255/07\351\241\271\347\233\256\346\226\207\346\241\243/\345\274\200\345\217\221\346\214\207\345\215\227.md" "b/\346\232\221\346\234\237\351\233\206\350\256\255/07\351\241\271\347\233\256\346\226\207\346\241\243/\345\274\200\345\217\221\346\214\207\345\215\227.md" new file mode 100644 index 0000000000000000000000000000000000000000..1bfc351c71a5d3aef29eea35d817a2290a53bda3 --- /dev/null +++ "b/\346\232\221\346\234\237\351\233\206\350\256\255/07\351\241\271\347\233\256\346\226\207\346\241\243/\345\274\200\345\217\221\346\214\207\345\215\227.md" @@ -0,0 +1,267 @@ +当然!以下是为你的多人实时涂色抢地盘游戏项目,基于你提供的详细需求与技术架构,整理出的: + +--- + +# 📘 **多人实时涂色抢地盘游戏 — 开发指南** + +--- + +## 🧩 文档结构 + +- #-一项目概述 +- #-二技术架构总览 +- #-三前端开发指南 + - #31-技术栈 + - #32-核心功能模块 + - #33-开发任务分解 + - #34-推荐开发流程 +- #-四后端开发指南 + - #41-技术栈 + - #42-核心功能模块 + - #43-开发任务分解 + - #44-推荐开发流程 +- #-五前后端交互与通信 +- #-六开发计划建议4天冲刺 +- #-七附录与扩展 + +--- + +## 🎮 一、项目概述 + +### 项目名称: +**多人实时涂色抢地盘游戏** + +### 目标用户: +喜欢轻度竞技、实时互动、简单策略的休闲游戏玩家 + +### 游戏类型: +多人实时协作/竞技类 Canvas 涂色游戏 + +### 核心玩法: +多名玩家(2~6人)在同一个画布上使用各自分配的颜色进行涂色,**不能覆盖他人已涂区域**,最终根据**占领画布面积最大**来决定胜负。 + +--- + +## 🔧 二、技术架构总览 + +| 层级 | 前端技术栈 | 后端技术栈 | +|------|-------------|-------------| +| **框架** | Vue 3 + Composition API | ASP.NET Core 8 (Minimal APIs) | +| **实时通信** | Socket.io-client | SignalR | +| **Canvas绘图** | 原生 Canvas API | - | +| **UI组件库** | Element Plus | - | +| **状态管理** | Pinia | - | +| **数据存储** | - | Redis(会话/实时数据)、PostgreSQL(持久化) | +| **架构模式** | - | 简洁 DDD + CQRS | + +--- + +## 📱 三、前端开发指南 + +### 3.1 技术栈 + +- **框架**: Vue 3(Composition API + `