mirror of
https://github.com/ChuXunYu/OnlineRpg.git
synced 2026-01-31 20:05:46 +00:00
592 lines
11 KiB
Markdown
592 lines
11 KiB
Markdown
# 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 容器
|
||
- ✅ 网络编程
|
||
- ✅ 数据库操作
|
||
- ✅ 多线程编程
|
||
- ✅ 跨平台开发
|
||
|
||
享受编程与游戏的乐趣!🎮
|