mirror of
https://github.com/ChuXunYu/OnlineRpg.git
synced 2026-01-31 13:45:47 +00:00
58 lines
3.8 KiB
Markdown
58 lines
3.8 KiB
Markdown
# **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 中移除,释放战斗房间等)。
|
||
* 客户端必须处理连接服务器失败、或中途与服务器断开连接的异常。 |