Files
OnlineRpg/如何运行和游戏.md
2025-10-26 20:44:58 +08:00

592 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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<string>` 记录所有战斗日志:
- 每回合的行动
- 伤害计算
- 状态变化
- 胜负结果
#### 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<string> battleLog;
battleLog.append("Round 1: Player attacks!");
battleLog.append("Enemy takes 30 damage");
// 使用手写的 Node<T> 链表存储
```
### 3. STL 容器
```cpp
// 客户端管理
std::map<int, shared_ptr<ClientHandler>> clients;
// 战斗房间管理
std::map<int, shared_ptr<BattleRoom>> 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<std::mutex> 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 容器
- ✅ 网络编程
- ✅ 数据库操作
- ✅ 多线程编程
- ✅ 跨平台开发
享受编程与游戏的乐趣!🎮