mirror of
https://github.com/ChuXunYu/OnlineRpg.git
synced 2026-01-31 17:05:45 +00:00
241 lines
5.8 KiB
Markdown
241 lines
5.8 KiB
Markdown
# OnlineRpg 编译与运行指南
|
||
|
||
## 编译环境
|
||
|
||
- **操作系统**: WSL (Debian)
|
||
- **编译器**: GCC 14.2.0
|
||
- **C++标准**: C++17
|
||
- **构建工具**: CMake 3.15+
|
||
- **数据库**: SQLite3 (amalgamation 版本)
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
OnlineRpg/
|
||
├── include/ # 头文件
|
||
│ ├── core/ # 核心模块 (多态、模板、链表)
|
||
│ ├── common/ # 通用模块 (网络、数据库)
|
||
│ ├── server/ # 服务器模块
|
||
│ └── client/ # 客户端模块
|
||
├── src/ # 源文件
|
||
├── lib/ # 第三方库 (SQLite3 amalgamation)
|
||
├── data/ # 数据目录 (数据库文件)
|
||
└── build/ # 构建目录
|
||
└── bin/ # 可执行文件
|
||
├── server # 服务器程序
|
||
└── client # 客户端程序
|
||
```
|
||
|
||
## 核心技术实现
|
||
|
||
### 1. 多态 (Polymorphism)
|
||
- **抽象基类**: `ICharacter`, `ISkill`
|
||
- **具体实现**: `Warrior`, `Mage`
|
||
- **技能系统**: 7种技能类 (NormalAttack, PowerStrike, etc.)
|
||
|
||
### 2. 模板 (Templates)
|
||
- **模板类**: `Node<T>`, `HistoryLog<T>`
|
||
- **用途**: 通用链表结构,用于战斗历史记录
|
||
|
||
### 3. 手写链表 (Linked List)
|
||
- **实现**: 基于 `Node<T>` 的单向链表
|
||
- **应用**: `HistoryLog<T>` 存储战斗日志
|
||
|
||
### 4. STL容器
|
||
- **std::map**: 客户端管理、战斗房间管理
|
||
- **std::vector**: 消息参数传递
|
||
- **std::shared_ptr**: 智能指针管理资源
|
||
- **std::thread**: 多线程客户端处理
|
||
- **std::mutex**: 线程同步
|
||
- **std::atomic**: 原子状态标志
|
||
|
||
### 5. 网络编程 (Networking)
|
||
- **跨平台Socket封装**: `SocketWrapper`
|
||
- **协议**: 管道分隔符的文本协议
|
||
- **架构**: TCP C/S模型,每客户端一线程
|
||
|
||
### 6. 数据库 (Database)
|
||
- **SQLite3**: 嵌入式数据库
|
||
- **表结构**: Users (用户表), Characters (角色表)
|
||
- **线程安全**: std::mutex 保护数据库操作
|
||
|
||
## 编译步骤
|
||
|
||
### 1. 清理构建目录
|
||
```bash
|
||
cd /mnt/e/50425/Documents/Github/OnlineRpg
|
||
rm -rf build
|
||
```
|
||
|
||
### 2. 配置 CMake
|
||
```bash
|
||
cmake -B build -DCMAKE_BUILD_TYPE=Release
|
||
```
|
||
|
||
### 3. 编译项目
|
||
```bash
|
||
cmake --build build --config Release -j4
|
||
```
|
||
|
||
编译输出:
|
||
- `build/bin/server` - 服务器可执行文件 (约1.7MB,包含SQLite)
|
||
- `build/bin/client` - 客户端可执行文件 (约80KB)
|
||
|
||
## 运行服务器
|
||
|
||
### 1. 创建数据目录
|
||
```bash
|
||
mkdir -p data
|
||
```
|
||
|
||
### 2. 启动服务器
|
||
```bash
|
||
./build/bin/server
|
||
```
|
||
|
||
服务器配置:
|
||
- **默认端口**: 8888
|
||
- **数据库文件**: `data/game.db`
|
||
|
||
成功启动输出:
|
||
```
|
||
==================================
|
||
OnlineRpg Server
|
||
==================================
|
||
Port: 8888
|
||
Database: data/game.db
|
||
==================================
|
||
Server started successfully
|
||
Listening on port: 8888
|
||
Database: Connected
|
||
Server accepting connections...
|
||
```
|
||
|
||
## 运行客户端
|
||
|
||
```bash
|
||
./build/bin/client
|
||
```
|
||
|
||
客户端功能:
|
||
- **注册**: 创建新账户
|
||
- **登录**: 登录现有账户
|
||
- **创建角色**: 选择职业 (Warrior/Mage)
|
||
- **大厅聊天**: 与其他玩家交流
|
||
- **战斗邀请**: 发起PvP战斗
|
||
- **回合制战斗**: 使用技能战斗
|
||
|
||
## 网络协议
|
||
|
||
### 消息格式
|
||
```
|
||
CMD|param1|param2|...\n
|
||
```
|
||
|
||
### 主要命令
|
||
- `REGISTER|username|password` - 注册
|
||
- `LOGIN|username|password` - 登录
|
||
- `CREATE_CHAR|class|name` - 创建角色
|
||
- `CHAT|message` - 聊天
|
||
- `INVITE|targetUsername` - 邀请战斗
|
||
- `BATTLE|action|target|skillIndex` - 战斗操作
|
||
|
||
## 数据库架构
|
||
|
||
### Users 表
|
||
```sql
|
||
CREATE TABLE Users (
|
||
UserID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
Username TEXT NOT NULL UNIQUE,
|
||
PasswordHash TEXT NOT NULL,
|
||
CreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
```
|
||
|
||
### Characters 表
|
||
```sql
|
||
CREATE TABLE Characters (
|
||
CharacterID INTEGER PRIMARY KEY AUTOINCREMENT,
|
||
UserID INTEGER NOT NULL,
|
||
CharacterClass TEXT NOT NULL,
|
||
CharacterName TEXT NOT NULL,
|
||
Level INTEGER DEFAULT 1,
|
||
Health INTEGER DEFAULT 100,
|
||
Attack INTEGER DEFAULT 10,
|
||
Defense INTEGER DEFAULT 5,
|
||
Magic INTEGER DEFAULT 0,
|
||
CreatedAt DATETIME DEFAULT CURRENT_TIMESTAMP
|
||
);
|
||
```
|
||
|
||
## 编译问题解决
|
||
|
||
### SQLite3 链接错误
|
||
**问题**: undefined reference to sqlite3_* functions
|
||
|
||
**解决方案**:
|
||
1. 在 CMakeLists.txt 中启用 C 语言支持:
|
||
```cmake
|
||
project(OnlineRpg VERSION 1.0.0 LANGUAGES C CXX)
|
||
```
|
||
|
||
2. 确保 SQLite amalgamation 文件被包含:
|
||
```cmake
|
||
set(COMMON_SOURCES
|
||
src/common/SocketWrapper.cpp
|
||
src/common/Protocol.cpp
|
||
src/common/Database.cpp
|
||
${SQLITE_SRC} # 包含 lib/sqlite3.c
|
||
)
|
||
```
|
||
|
||
3. 链接服务器时包含 SQLite:
|
||
```cmake
|
||
target_link_libraries(server core common ${SQLITE_LIBS} ${PLATFORM_LIBS})
|
||
```
|
||
|
||
### 前向声明错误
|
||
**问题**: invalid use of incomplete type 'class BattleRoomManager'
|
||
|
||
**解决方案**: 在 .cpp 文件中包含完整的头文件:
|
||
```cpp
|
||
#include "server/BattleRoomManager.h" // 而不是前向声明
|
||
```
|
||
|
||
## 测试验证
|
||
|
||
### 功能测试
|
||
- [x] 服务器启动成功
|
||
- [x] 数据库自动创建和初始化
|
||
- [x] Socket监听端口8888
|
||
- [ ] 客户端连接测试
|
||
- [ ] 注册登录功能
|
||
- [ ] 角色创建功能
|
||
- [ ] 聊天系统
|
||
- [ ] 战斗系统
|
||
|
||
### 技术验证
|
||
- [x] 多态: ICharacter/ISkill 接口
|
||
- [x] 模板: HistoryLog<T> 类
|
||
- [x] 链表: Node<T> 手写链表
|
||
- [x] STL: map, vector, shared_ptr, thread, mutex
|
||
- [x] 网络: SocketWrapper 跨平台封装
|
||
- [x] 数据库: SQLite3 集成
|
||
|
||
## 下一步
|
||
|
||
1. **功能测试**: 测试完整的游戏流程
|
||
2. **集成测试**: 多客户端同时连接
|
||
3. **性能优化**: 优化数据库查询和网络通信
|
||
4. **错误处理**: 完善异常处理和错误恢复
|
||
5. **文档完善**: 添加API文档和用户手册
|
||
|
||
## 项目完成度
|
||
|
||
- ✅ 环境配置 (100%)
|
||
- ✅ 核心技术实现 (100%)
|
||
- ✅ 编译成功 (100%)
|
||
- ✅ 服务器运行 (100%)
|
||
- ⏳ 功能测试 (0%)
|
||
- ⏳ 验收标准 (待验证)
|