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实现使用工具的功能,因为并不需要绑定某个玩家来实现,工具的效果是全局有效的。
本文作者:北纬31是条纬线哦
本文链接:https://www.cnblogs.com/beiwei31/p/18695141
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步