# **项目验收标准 (Checklist)**

以下清单用于验证项目是否满足《C++程序设计》结课作业的核心要求。

## **1\. 功能验收**

* \[ \] **UC-01 (账户)**：可以成功注册新用户，数据库 Users 表中出现新纪录。  
* \[ \] **UC-01 (账户)**：可以使用已注册的账户成功登录。  
* \[ \] **UC-02 (大厅)**：客户端A 在大厅发送消息，客户端B、C (均在大厅) 能收到。  
* \[ \] **UC-02 (大厅)**：客户端可以正确获取在线玩家列表。  
* \[ \] **UC-03 (邀请)**：客户端A 邀请 B，B 收到提示并能接受或拒绝。  
* \[ \] **UC-04 (战斗)**：A 和 B 进入战斗后，不再收到大厅聊天。  
* \[ \] **UC-04 (战斗)**：战斗逻辑在服务器端正确执行（e.g., A 攻击 B，B 的 HP 减少）。  
* \[ \] **UC-04 (战斗)**：客户端能正确收发战报，并显示回合制提示。  
* \[ \] **UC-04 (战斗)**：一方 HP 归零后，服务器能正确宣布胜负，并将双方踢回大厅。  
* \[ \] **健壮性**：客户端A 强行退出 (Ctrl+C)，服务器能检测到，并在玩家列表中移除 A。

## **2\. 关键技术验收 (强制)**

* \[ \] **多态**：  
  * \[ \] 提供了 ICharacter 和 ISkill 抽象基类。  
  * \[ \] 提供了至少 2 种职业和 2 种技能的派生类。  
  * \[ \] BattleRoom 仅通过 ICharacter\* 和 ISkill\* (基类指针) 来执行战斗逻辑。  
* \[ \] **STL**：  
  * \[ \] GameServer 使用 std::map 管理 ClientHandler。  
  * \[ \] GameServer (或 ClientHandler) 使用 std::thread 为每个客户端创建了线程。  
  * \[ \] GameLobby 和 BattleRoom 在访问共享数据（如 map, 战斗状态）时，使用了 std::mutex。  
  * \[ \] BattleRoom 使用 std::vector \+ \<algorithm\> (std::sort) 来管理行动顺序。  
* \[ \] **模板 \+ 链表**：  
  * \[ \] 提供了 HistoryLog.h 文件。  
  * \[ \] 该文件**手写**实现了泛型的 Node\<T\> 结构体。  
  * \[ \] 该文件**手写**实现了泛型类 HistoryLog\<T\>。  
  * \[ \] HistoryLog\<T\> **必须**使用 Node\<T\>\* (链表) 作为其底层数据结构，**而不是** std::list 或 std::vector。  
  * \[ \] BattleRoom 成功实例化并使用了 HistoryLog\<string\>。  
* \[ \] **网络编程**：  
  * \[ \] 提供了 SocketWrapper (或等效) 类来封装原生 Socket API。  
  * \[ \] 服务器实现了 bind, listen, accept 的 C/S 模型。  
  * \[ \] 客户端实现了 connect 模型。  
  * \[ \] 客户端使用了**多线程**来分别处理 send 和 recv。  
* \[ \] **数据库**：  
  * \[ \] 项目集成了 sqlite3.c / sqlite3.h。  
  * \[ \] 提供了 Database 封装类。  
  * \[ \] Users 和 Characters 表已按设计创建。  
  * \[ \] 注册和登录功能已通过数据库 SELECT/INSERT 验证。