# 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 容器
- ✅ 网络编程
- ✅ 数据库操作
- ✅ 多线程编程
- ✅ 跨平台开发

享受编程与游戏的乐趣！🎮
