This commit is contained in:
2025-10-26 20:44:58 +08:00
parent e287aadd3c
commit e73c08abf7
45 changed files with 280774 additions and 0 deletions

591
如何运行和游戏.md Normal file
View File

@@ -0,0 +1,591 @@
# 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 容器
- ✅ 网络编程
- ✅ 数据库操作
- ✅ 多线程编程
- ✅ 跨平台开发
享受编程与游戏的乐趣!🎮