RaceGame-Qt游戏项目构建-玩家道具
RaceGame-Qt游戏项目构建-玩家道具
玩家道具概述
游戏的道具分为两种,一种命名为“工具Tools”,,工具具有永久作用 且仅作用于使用工具的玩家自身。另一种命名为“魔法Magics”,魔法具有暂时作用,且作用于释放者指定的玩家。两种道具具有不同的实现方式(例如魔法需要具备“备忘录”功能记录玩家原始状态并恢复),本篇是工具Tools的设计概述。
一、 class Tools
道具基类,代表玩家使用的道具。
class Tools : public QObject {
Q_OBJECT
public:
Tools(QString toolname, int usr_id);
virtual ~Tools();
QString toolname;
int usrId;
virtual void launchTool() = 0;
};
道具构造的时候需要传入参数,道具的名字,使用者的ID。
道具具有一个多态函数void launchTool(),代表释放道具,用于在派生类中改写实现方法。
二、 工具派生类
构造工具类的时候需要传递一个用户Id的参数。
代表具体的工具。工具的效果在派生类中实现,每个工具都有 void launchTool() 方法重写基类的虚函数。
// 监狱
// 在自己周围放置墙。
class prisonTool : public Tools {
public:
prisonTool(int usr_id);
~prisonTool();
private:
public:
void launchTool() override;
};
// 滑行
// 永久提高自己速度 1 点。(最高提高3 点)
class slideTool : public Tools {
public:
slideTool(int usr_id);
~slideTool();
private:
public:
void launchTool() override;
};
// 冰霜
// 永久降低自己速度 1 点。(最多降低 3 点)
class resistanceTool : public Tools {
public:
resistanceTool(int usr_id);
~resistanceTool();
private:
public:
void launchTool() override;
};
// 变换
// 随机改变运动方向(45 90 135 180 225 270 315)
class transformTool : public Tools {
public:
transformTool(int usr_id);
~transformTool();
private:
public:
void launchTool() override;
};
// 破坏
// 直接撞碎一堵墙,但此次会反弹(不一定对自己有利)。
class destoryTool : public Tools {
public:
destoryTool(int usr_id);
~destoryTool();
private:
public:
void launchTool() override;
};
三、 class ToolsManager
抽象类,工具管理器。
class ToolsManager {
private:
static std::shared_ptr<Tools> m_tool;
public:
ToolsManager();
void GetTool(int usr_id);
void UseTool();
QString toolName() {return m_tool->toolname; }
};
提供了两个主要接口,获取工具和使用工具。
四、 class ToolRandomGenerator
用于生成随机数,例如获取工具的时候需要依据概率随机给玩家发放工具,int generateToolid(), “变换”工具需要给玩家随机设置一个运动向量 int generateVector() ,但是这个向量不能太靠近坐标轴,避免玩家反复在一条直线附近运动。这些都由这个类来实现。
// 生成工具的随机数
// singleton
class ToolRandomGenerator {
private:
static ToolRandomGenerator * randmGenerator;
ToolRandomGenerator();
int randomNum;
public:
static ToolRandomGenerator * getInstance();
int generateToolid();
int generateVector();
};
迭代结果
在之前版本中,游戏中的工具与游戏玩家紧耦合,不利于扩展工具功能,并且玩家使用工具也存在复杂的耦合关系,需要在玩家类中实现调用工具接口。
利用设计模式原则,现在将工具类与玩家类拆开实现松耦合,仅通过传递玩家id实现使用工具的功能,因为并不需要绑定某个玩家来实现,工具的效果是全局有效的。

浙公网安备 33010602011771号