mirror of
https://github.com/ChuXunYu/OnlineRpg.git
synced 2026-01-31 06:51:27 +00:00
72 lines
1.6 KiB
C++
72 lines
1.6 KiB
C++
#pragma once
|
||
#include "BattleRoom.h"
|
||
#include <map>
|
||
#include <mutex>
|
||
#include <memory>
|
||
|
||
// 前向声明
|
||
class GameServer;
|
||
|
||
/**
|
||
* @brief 战斗房间管理器
|
||
*
|
||
* 技术点: STL - std::map, std::mutex
|
||
*/
|
||
class BattleRoomManager {
|
||
private:
|
||
GameServer* m_server;
|
||
std::map<int, std::shared_ptr<BattleRoom>> m_rooms; // STL
|
||
std::mutex m_mutex; // STL
|
||
int m_nextRoomId;
|
||
|
||
public:
|
||
/**
|
||
* @brief 构造函数
|
||
*/
|
||
explicit BattleRoomManager(GameServer* server);
|
||
|
||
/**
|
||
* @brief 析构函数
|
||
*/
|
||
~BattleRoomManager();
|
||
|
||
/**
|
||
* @brief 创建战斗房间
|
||
* @param player1 玩家1用户名
|
||
* @param player2 玩家2用户名
|
||
* @return int 房间ID,失败返回 -1
|
||
*/
|
||
int createBattle(const std::string& player1, const std::string& player2);
|
||
|
||
/**
|
||
* @brief 获取战斗房间
|
||
*/
|
||
std::shared_ptr<BattleRoom> getBattleRoom(int roomId);
|
||
|
||
/**
|
||
* @brief 处理战斗行动
|
||
*/
|
||
bool handleBattleAction(int roomId,
|
||
const std::string& username,
|
||
int skillIndex,
|
||
const std::string& targetName);
|
||
|
||
/**
|
||
* @brief 移除战斗房间
|
||
*/
|
||
void removeBattleRoom(int roomId);
|
||
|
||
/**
|
||
* @brief 检查玩家是否在战斗中
|
||
*/
|
||
bool isPlayerInBattle(const std::string& username);
|
||
|
||
private:
|
||
/**
|
||
* @brief 创建角色实例
|
||
*/
|
||
std::shared_ptr<ICharacter> createCharacter(const std::string& className,
|
||
const std::string& name,
|
||
int level = 1);
|
||
};
|