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

11 KiB
Raw Permalink Blame History

OnlineRpg 运行和游戏指南

快速开始

第一步:启动服务器

在 WSL 终端中运行:

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 终端窗口,运行:

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 - 服务器

./build/bin/server
# 保持运行

终端2 - 玩家A (xiaoming)

./build/bin/client
# 登录 -> 创建战士 -> 进入大厅
Select: 1
Enter message: 有人组队吗?

终端3 - 玩家B (xiaohua)

./build/bin/client
# 登录 -> 创建法师 -> 进入大厅
# 看到 xiaoming 的聊天
Select: 3
Enter target: xiaoming
# 邀请战斗

终端4 - 玩家C (xiaogang)

./build/bin/client
# 旁观,或者等战斗结束后挑战胜者

常见问题

Q1: 连接失败怎么办?

检查服务器是否启动:

ps aux | grep server

检查端口是否被占用:

netstat -an | grep 8888

重启服务器:

killall server  # 如果有旧进程
./build/bin/server

Q2: 数据库错误?

删除并重新创建:

rm -f data/game.db
./build/bin/server  # 自动重建表结构

Q3: 客户端卡住了?

重新连接:

  • Ctrl+C 退出客户端
  • 重新运行 ./build/bin/client
  • 重新登录

Q4: 忘记密码了?

直接修改数据库(开发测试用):

sqlite3 data/game.db
-- 查看所有用户
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:

cmake -B build -G "MinGW Makefiles"
cmake --build build
build\bin\server.exe

技术特性展示

1. 多态 (Polymorphism)

// 战斗中,不同职业使用各自的技能
ICharacter* player = new Warrior();
ISkill* skill = new PowerStrike();
skill->execute(*player, *enemy);  // 多态调用

2. 模板与链表 (Templates & Linked List)

// 战斗历史记录
HistoryLog<string> battleLog;
battleLog.append("Round 1: Player attacks!");
battleLog.append("Enemy takes 30 damage");
// 使用手写的 Node<T> 链表存储

3. STL 容器

// 客户端管理
std::map<int, shared_ptr<ClientHandler>> clients;

// 战斗房间管理
std::map<int, shared_ptr<BattleRoom>> rooms;

// 多线程
std::thread clientThread(&ClientHandler::run, handler);

4. 网络编程

// 跨平台 Socket 封装
SocketWrapper socket;
socket.connect("127.0.0.1", 8888);
socket.sendLine("LOGIN|xiaoming|123456");
string response = socket.recvLine();

5. 数据库

// SQLite3 操作
Database db("data/game.db");
db.registerUser("xiaoming", "123456");
db.createCharacter(userId, "Warrior");

6. 线程安全

// 多线程保护
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. 数据分析

  • 查看战斗日志
  • 分析伤害输出
  • 优化技能搭配

开发者选项

查看数据库内容

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;

调试模式

编译时启用调试输出:

cmake -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build build

性能测试

同时启动多个客户端:

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

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