This commit is contained in:
ChuXun
2025-10-26 16:37:22 +08:00
parent fba64f7100
commit e287aadd3c
5 changed files with 408 additions and 0 deletions

58
详细需求规格.md Normal file
View File

@@ -0,0 +1,58 @@
# **1\. 涉众 (Actors)**
* **玩家 (Player)**:唯一的用户类型。
# **2\. 功能需求 (Use Cases)**
## **2.1. UC-01: 用户账户管理**
* **As a** 玩家, **I want to** 在客户端启动时,可以选择“注册”或“登录”。
* **Acceptance Criteria:**
1. **注册**:需要提供唯一的“用户名”和“密码”。服务器检查用户名是否已存在于数据库。
2. **登录**:需要提供“用户名”和“密码”。服务器在数据库中验证。
3. **数据持久化**:注册信息必须使用 SQLite 数据库存储。
4. **安全**:密码应在数据库中加盐哈希存储(*开发注如果时间紧张MVP 阶段可降级为明文存储*)。
## **2.2. UC-02: 游戏大厅 (Lobby)**
* **As a** 玩家, **I want to** 登录成功后进入游戏大厅,以便和其他玩家互动。
* **Acceptance Criteria:**
1. **公共聊天**:玩家可以发送消息,该消息应被广播给所有**当前在大厅中**的其他玩家。
2. **接收聊天**:玩家可以实时看到大厅中的所有公共聊天消息。
3. **玩家列表**:玩家可以输入特定命令(如 /list从服务器获取当前所有在线玩家的列表。
## **2.3. UC-03: 战斗邀请与匹配**
* **As a** 玩家, **I want to** 邀请大厅里的其他玩家进行 1v1 对战。
* **Acceptance Criteria:**
1. **发起邀请**玩家A可以向玩家B必须在线且不在战斗中发送对战邀请。
2. **接收邀请**玩家B会收到“玩家A向你发起决斗是否接受(y/n)”的提示。
3. **响应**玩家B响应后结果会通知给玩家A。
4. **状态变更**:一旦双方同意,服务器应将两名玩家的状态标记为“战斗中”,他们将不再接收大厅聊天。
## **2.4. UC-04: 回合制战斗 (1v1)**
* **As a** 玩家, **I want to** 在战斗房间中,和对手轮流行动,直到一方 HP 降为 0。
* **Acceptance Criteria:**
1. **战斗逻辑在服务器**所有战斗计算伤害、闪避、Buff**必须**在服务器上进行。
2. **角色职业**:至少实现 2 个职业(如 Warrior, Mage它们具有不同的属性和技能。
3. **技能系统**:每个职业至少有 2 个技能(如 Fireball, Heal
4. **回合制**:服务器根据角色“速度”属性决定行动顺序。轮到某玩家时,服务器通知其客户端“请行动”。
5. **行动**:玩家客户端发送行动指令(如 "USE:Fireball:Target\_B")。
6. **战报**:服务器执行行动后,将结果(如 "A对B使用了\[火球\]造成50伤害")广播给**战斗中的两名**玩家。
7. **胜负**:一方 HP \<= 0 时战斗结束。服务器宣布胜利者并将双方T出战斗房间状态改回“在线”。
# **3\. 非功能需求**
1. **技术栈 (强制)**
* **多态**:必须用于实现 ICharacter (角色基类) 和 ISkill (技能基类)。
* **STL**:必须深度使用 std::map (管理客户端), std::vector (管理战斗序列), std::thread (并发), std::mutex (线程同步)。
* **模板 \+ 链表**:必须**手写一个泛型链表类** HistoryLog\<T\> (模板),用于存储战斗日志(链表)。
* **网络编程**:必须使用**原生 Socket API** (Winsock/POSIX Sockets) 并自行封装。
* **数据库**:必须使用 **SQLite3** 库进行数据持久化。
2. **性能**
* 服务器必须能稳定处理至少 10 个并发的客户端连接。
* 网络通信延迟在局域网内应无明显卡顿。
3. **健壮性**
* 服务器必须处理客户端的异常断开(如 Ctrl+C并正确清理其资源从 map 中移除,释放战斗房间等)。
* 客户端必须处理连接服务器失败、或中途与服务器断开连接的异常。