Files
OnlineRpg/详细需求规格.md
ChuXun e287aadd3c 1
2025-10-26 16:37:22 +08:00

3.8 KiB
Raw Permalink Blame History

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 中移除,释放战斗房间等)。
    • 客户端必须处理连接服务器失败、或中途与服务器断开连接的异常。