# OnlineRpg 运行和游戏指南 ## 快速开始 ### 第一步:启动服务器 在 WSL 终端中运行: ```bash cd /mnt/e/50425/Documents/Github/OnlineRpg ./build/bin/server ``` 你会看到: ``` ================================== OnlineRpg Server ================================== Port: 8888 Database: data/game.db ================================== Server started successfully Listening on port: 8888 Database: Connected Server accepting connections... ``` **保持这个终端开着!服务器正在运行。** ### 第二步:启动客户端(新开终端) 打开**新的** WSL 终端窗口,运行: ```bash cd /mnt/e/50425/Documents/Github/OnlineRpg ./build/bin/client ``` ## 游戏流程指南 ### 1. 连接服务器 客户端启动后会自动尝试连接 `localhost:8888` 你会看到主菜单: ``` ======================================== OnlineRpg Client ======================================== 1. Register (注册) 2. Login (登录) 3. Exit (退出) ======================================== Please select: ``` ### 2. 注册新账号 首次游戏选择 `1` (注册): ``` Enter username: xiaoming Enter password: 123456 ``` 服务器会返回: ``` SUCCESS|Registration successful ``` ### 3. 登录游戏 选择 `2` (登录): ``` Enter username: xiaoming Enter password: 123456 ``` 成功后显示: ``` SUCCESS|Login successful ``` ### 4. 创建角色 首次登录会提示创建角色: ``` You need to create a character first. Select class: 1. Warrior (战士 - 高血量高防御) 2. Mage (法师 - 高魔法攻击) Enter choice: 1 Enter character name: 小明的战士 ``` #### 职业说明: **战士 (Warrior)** - 生命值: 150 - 攻击力: 15 - 防御力: 10 - 魔法: 0 - 技能: - 普通攻击 (Normal Attack) - 强力打击 (Power Strike) - 2倍伤害 - 防御姿态 (Defensive Stance) - 提升防御 **法师 (Mage)** - 生命值: 100 - 攻击力: 8 - 防御力: 3 - 魔法: 20 - 技能: - 普通攻击 (Normal Attack) - 火球术 (Fireball) - 魔法伤害 - 奥术护盾 (Arcane Shield) - 魔法防护 ### 5. 游戏大厅 创建角色后进入游戏大厅: ``` ======================================== Game Lobby ======================================== 1. Chat (聊天) 2. List Players (查看在线玩家) 3. Invite to Battle (邀请战斗) 4. Check Battle Status (查看战斗状态) 5. Logout (登出) ======================================== Select: ``` #### 5.1 聊天功能 选择 `1`: ``` Enter message: 大家好!有人一起战斗吗? ``` 所有在线玩家都会收到: ``` [Chat] xiaoming: 大家好!有人一起战斗吗? ``` #### 5.2 查看在线玩家 选择 `2`: ``` Online Players: - xiaoming (Warrior Lv.1) - xiaohua (Mage Lv.1) - xiaogang (Warrior Lv.2) ``` #### 5.3 邀请战斗 选择 `3`: ``` Enter target player username: xiaohua ``` 对方会收到邀请: ``` [Battle Invite] xiaoming wants to battle with you! Accept? (yes/no): ``` ### 6. 战斗系统 #### 6.1 战斗开始 当对方接受邀请后,双方进入战斗: ``` ======================================== Battle Started! ======================================== Your Character: 小明的战士 (Warrior) HP: 150/150 ATK: 15 DEF: 10 Enemy: 小花的法师 (Mage) HP: 100/100 ATK: 8 DEF: 3 ======================================== ``` #### 6.2 回合制战斗 每个回合你可以选择: ``` Your Turn! ======================================== Available Skills: 0. Normal Attack (普通攻击) 1. Power Strike (强力打击 - 消耗10能量) 2. Defensive Stance (防御姿态 - 消耗15能量) ======================================== Select skill (0-2): ``` **技能详解:** **战士技能:** 1. **普通攻击** - 基础攻击,造成 ATK 伤害 2. **强力打击** - 造成 2×ATK 伤害,消耗能量 3. **防御姿态** - 临时提升防御力50%,持续一回合 **法师技能:** 1. **普通攻击** - 基础攻击 2. **火球术** - 造成 (ATK + MAGIC) 的魔法伤害 3. **奥术护盾** - 减少50%受到的伤害 4. **冰霜新星** - 魔法AOE攻击 5. **闪电链** - 连续攻击 6. **治疗术** - 恢复生命值 7. **魔法箭** - 精准魔法攻击 #### 6.3 战斗日志 每个行动都会记录: ``` [Round 1] > xiaoming uses Power Strike! > Deals 30 damage to xiaohua! > xiaohua HP: 100 -> 70 > xiaohua uses Fireball! > Deals 28 magic damage to xiaoming! > xiaoming HP: 150 -> 122 ======================================== ``` #### 6.4 战斗结束 战斗结束条件: - 任意一方HP降至0 - 玩家逃跑 - 连接断开 胜利显示: ``` ======================================== Victory! ======================================== You defeated xiaohua! Rewards: - Experience: +50 XP - Level Up! (Lv.1 -> Lv.2) ======================================== ``` 失败显示: ``` ======================================== Defeat... ======================================== You were defeated by xiaohua. Better luck next time! ======================================== ``` ### 7. 战斗策略建议 #### 战士策略: 1. **开局**: 使用防御姿态提升防御 2. **中期**: 积累能量后使用强力打击 3. **残血**: 优先普通攻击保持输出 4. **对法师**: 利用高防御抗魔法,近身输出 #### 法师策略: 1. **开局**: 火球术快速压血 2. **中期**: 使用奥术护盾减伤 3. **残血**: 治疗术回血,拉扯战线 4. **对战士**: 保持距离,魔法风筝 ### 8. 高级功能 #### 8.1 查看战斗历史 战斗房间使用 `HistoryLog` 记录所有战斗日志: - 每回合的行动 - 伤害计算 - 状态变化 - 胜负结果 #### 8.2 多人同时在线 - 服务器支持多客户端连接 - 每个客户端独立线程处理 - 使用 `std::map` 管理所有连接 - `std::mutex` 保证线程安全 #### 8.3 数据持久化 - 用户账号保存在 `data/game.db` - 角色数据自动保存 - 重新登录后保留等级和属性 ## 多人游戏示例 ### 场景:三人同时在线 **终端1 - 服务器** ```bash ./build/bin/server # 保持运行 ``` **终端2 - 玩家A (xiaoming)** ```bash ./build/bin/client # 登录 -> 创建战士 -> 进入大厅 Select: 1 Enter message: 有人组队吗? ``` **终端3 - 玩家B (xiaohua)** ```bash ./build/bin/client # 登录 -> 创建法师 -> 进入大厅 # 看到 xiaoming 的聊天 Select: 3 Enter target: xiaoming # 邀请战斗 ``` **终端4 - 玩家C (xiaogang)** ```bash ./build/bin/client # 旁观,或者等战斗结束后挑战胜者 ``` ## 常见问题 ### Q1: 连接失败怎么办? **检查服务器是否启动:** ```bash ps aux | grep server ``` **检查端口是否被占用:** ```bash netstat -an | grep 8888 ``` **重启服务器:** ```bash killall server # 如果有旧进程 ./build/bin/server ``` ### Q2: 数据库错误? **删除并重新创建:** ```bash rm -f data/game.db ./build/bin/server # 自动重建表结构 ``` ### Q3: 客户端卡住了? **重新连接:** - 按 `Ctrl+C` 退出客户端 - 重新运行 `./build/bin/client` - 重新登录 ### Q4: 忘记密码了? **直接修改数据库(开发测试用):** ```bash sqlite3 data/game.db ``` ```sql -- 查看所有用户 SELECT * FROM Users; -- 重置密码 (hash值需要计算) UPDATE Users SET PasswordHash = '新密码hash' WHERE Username = 'xiaoming'; ``` **或者注册新账号。** ### Q5: 如何在 Windows 上运行? 项目代码支持跨平台,在 Windows 上: 1. **使用 Visual Studio:** - 打开 CMake 项目 - 选择 x64-Release 配置 - 生成解决方案 - 运行 server.exe 和 client.exe 2. **使用 MinGW:** ```cmd cmake -B build -G "MinGW Makefiles" cmake --build build build\bin\server.exe ``` ## 技术特性展示 ### 1. 多态 (Polymorphism) ```cpp // 战斗中,不同职业使用各自的技能 ICharacter* player = new Warrior(); ISkill* skill = new PowerStrike(); skill->execute(*player, *enemy); // 多态调用 ``` ### 2. 模板与链表 (Templates & Linked List) ```cpp // 战斗历史记录 HistoryLog battleLog; battleLog.append("Round 1: Player attacks!"); battleLog.append("Enemy takes 30 damage"); // 使用手写的 Node 链表存储 ``` ### 3. STL 容器 ```cpp // 客户端管理 std::map> clients; // 战斗房间管理 std::map> rooms; // 多线程 std::thread clientThread(&ClientHandler::run, handler); ``` ### 4. 网络编程 ```cpp // 跨平台 Socket 封装 SocketWrapper socket; socket.connect("127.0.0.1", 8888); socket.sendLine("LOGIN|xiaoming|123456"); string response = socket.recvLine(); ``` ### 5. 数据库 ```cpp // SQLite3 操作 Database db("data/game.db"); db.registerUser("xiaoming", "123456"); db.createCharacter(userId, "Warrior"); ``` ### 6. 线程安全 ```cpp // 多线程保护 std::mutex m_clientsMutex; { std::lock_guard lock(m_clientsMutex); m_clients[clientId] = handler; } ``` ## 游戏截图示例 ``` 玩家A视角: ======================================== [Battle] Round 3 Your HP: 85/150 Enemy HP: 45/100 ---------------------------------------- You used: Power Strike Critical Hit! 45 damage! Enemy HP: 45 -> 0 ======================================== Victory! ======================================== ``` ``` 玩家B视角: ======================================== [Battle] Round 3 Your HP: 45/100 Enemy HP: 85/150 ---------------------------------------- Enemy used: Power Strike You took 45 damage! Your HP: 45 -> 0 ======================================== Defeat... ======================================== ``` ## 进阶玩法 ### 1. 练级策略 - 多次战斗积累经验 - 升级提升属性 - 解锁更强技能 ### 2. 战术配合 - 战士吸引火力 - 法师后排输出 - 组队刷怪 ### 3. PvP 竞技 - 排位战 - 天梯系统 - 赛季奖励 ### 4. 数据分析 - 查看战斗日志 - 分析伤害输出 - 优化技能搭配 ## 开发者选项 ### 查看数据库内容 ```bash sqlite3 data/game.db -- 查看所有用户 SELECT * FROM Users; -- 查看所有角色 SELECT * FROM Characters; -- 查看特定玩家 SELECT u.Username, c.CharacterName, c.CharacterClass, c.Level FROM Users u JOIN Characters c ON u.UserID = c.UserID; ``` ### 调试模式 编译时启用调试输出: ```bash cmake -B build -DCMAKE_BUILD_TYPE=Debug cmake --build build ``` ### 性能测试 同时启动多个客户端: ```bash for i in {1..10}; do ./build/bin/client & done ``` ## 项目文件说明 ``` OnlineRpg/ ├── build/bin/ │ ├── server # 服务器程序 │ └── client # 客户端程序 ├── data/ │ └── game.db # SQLite 数据库(自动创建) ├── include/ # 头文件 ├── src/ # 源代码 ├── lib/ │ ├── sqlite3.c # SQLite3 amalgamation │ └── sqlite3.h ├── CMakeLists.txt # CMake 配置 └── 各种文档.md ``` ## 祝你游戏愉快! 有任何问题欢迎查看源码或提问。项目展示了: - ✅ 面向对象设计 - ✅ 多态与继承 - ✅ 模板编程 - ✅ STL 容器 - ✅ 网络编程 - ✅ 数据库操作 - ✅ 多线程编程 - ✅ 跨平台开发 享受编程与游戏的乐趣!🎮