RaceGame-Qt游戏项目构建-游戏框架

打印 上一主题 下一主题

主题 555|帖子 555|积分 1665

RaceGame-Qt游戏项目构建-游戏框架

游戏企划

使用Qt图形化界面开辟一款名为 RaceGame 的小游戏,游戏玩法是4方玩家(方块)在带有墙体的地图中以肯定速度、肯定方向前进,碰到墙领会反弹,最终玩家按照到达目的地的先后序次排名。
游戏过程中,玩家可以通过界面上的 Button 按钮举行释放技能,不同的技能会对不同的玩家举行状态改变,以此增长游戏的自由度和可玩性。
Player相关类

Player 相关类在放在 player.h 头文件中,对应的源文件是 player.cpp 。
一、 class Player

核心类:玩家,代表在游戏界面运动的玩家,也就是小方块。
  1. class Player : public QObject
  2. {
  3. public:
  4.     Player(int id, int speed,
  5.            QPoint pos, QPointF vec);
  6. private:
  7.     int playerId;
  8.     int speed;
  9.     QPoint position;
  10.     QPointF moveVector;
  11.     std::shared_ptr<Tools> tool;
  12.     QTimer * preLaunchTimer;
  13. public:
  14.     QMetaObject::Connection playerMoveConnection;
  15.     QMetaObject::Connection playerDrawConnection;
  16.     std::shared_ptr<Tools> getTool();
  17.     void useTool();
  18.     void stopTool();
  19.     void setPosition(QPoint pos);
  20.     int getPlayerId() {return this->playerId;}
  21.     QPoint getPosition() {return this->position; }
  22.     void setMoveVector(QPointF vec);
  23.     QPointF getMoveVector() {return this->moveVector;}
  24.     void setSpeed(int s);
  25.     int getSpeed() {return this->speed; }
  26.     void moveStep();
  27.     void reachEndPoint();
  28. };
复制代码
具有私有属性(成员变量)玩家号,速度,位置,以及运动方向等。
公有成员函数:获取或设置对象的私有属性的方法;获取道具方法,可以从游戏的 7 种工具中随机获得一个道具;使用道具方法:使用获取的道具,通过 QTimer * preLaunchTimer 计时器类型控制使用时限,10秒内使用道具,否则自动释放道具。停止使用道具方法:当使用道具,道具具有特定时长,当特定时长结束后,玩家会停止使用道具,并根据环境是否规复道具对玩家的效果。
二、 class Tools

道具,代表玩家使用的道具。
  1. class Tools : public QObject {
  2.     Q_OBJECT
  3. public:
  4.     Tools(int duration, QString toolname, int usr_id);
  5.     virtual ~Tools();
  6. protected:
  7.     QTimer * toolTimer;
  8.     int duration;
  9.     QString toolname;
  10.     int usrId;
  11. public:
  12.     QString getName() {return this->toolname;}
  13.     virtual void launchTool() = 0;
  14.     virtual void recoveryTool() = 0;
  15. };
复制代码
道具构造的时间必要传入参数,道具的连续时间,道具的名字,使用者的ID,并对私有成员变量初始化。
道具具有两个纯虚函数,分别是 释放道具、规复道具。必要在子类的具体道具类型中举行重写,释放道具即使用者使用工具的效果,规复道具即使用完道具后玩家必要规复原有状态。
  1.     virtual void launchTool() = 0;
  2.     virtual void recoveryTool() = 0;
复制代码
三、 工具派生类

构造工具类的时间必要传递一个用户Id的参数。
代表具体的工具。工具的效果在派生类中实现,每个工具都有 void launchTool();; 和 void recoveryTool(); 方法,重写基类的对应方法。。
  1. // 冻结
  2. // 冻结除自己以外随机的一位玩家(5)秒。
  3. class frizenTool : public Tools {};
  4. // 监狱
  5. // 在自己后方放置一堵墙(5)秒。
  6. class prisonTool : public Tools {};
  7. // 弹射
  8. // 提高自己速度(5)秒后逐渐降低为原速度。
  9. class jumpTool : public Tools {};
  10. // 滑行
  11. // 永久提高自己速度 1 点。(最高提高3 点)
  12. class slideTool : public Tools {};
  13. // 冰霜
  14. // 永久降低自己速度 1 点。(最多降低 3 点)
  15. class resistanceTool : public Tools {};
  16. // 变换
  17. // 随机改变运动方向
  18. class transformTool : public Tools {};
  19. // 破坏(稀有)
  20. // 直接撞碎一堵墙,但此次会反弹
  21. class destoryTool : public Tools {};
复制代码
例如,冻结(frizenTool)工具的作用是冻结除自己以外的一位玩家5秒。 lanchTool() 函数实现冻结的效果,并开始计时,五秒之后触发槽函数,调用 recoveryTool() 函数,就必要把原来冻结的玩家排除冻结,即使玩家的速度规复到原来的速度。
四、 class playersManager

玩家管理类,可以创建指定个数的玩家,以及记录玩家数量,记录玩家轮替环境。具有一个静态成员变量 PlayerList ,存放创建好的玩家对象。
  1. class playersManager {
  2.     friend class Player;
  3.     friend class Tools;
  4. private:
  5. public:
  6.     playersManager();
  7.     static int nemberNum;
  8.     static int PlayerTrun;
  9.     static int reachPlayerNum;
  10.     void createPlayer(int memberNum = 1);
  11.     static QList<std::shared_ptr<Player>> PlayerList;
  12.     static void trunNextPlayer();
  13. };
复制代码
指定了两个友元类,Player 类和 Tools 类可以直接获取管理器的成员变量、成员函数。
五、 class playersMove

玩家移动管理器,用于计时玩家的移动。
  1. class playersMove : public QObject {
  2.     Q_OBJECT
  3. public:
  4.     playersMove();
  5. private:
  6.     static QTimer * playerMoveTimer;
  7. public:
  8.     void startTimer();
  9.     void stopTimer();
  10.     void move(std::shared_ptr<Player>& player);
  11.     void stop(std::shared_ptr<Player>& player);
  12. };
复制代码
playerMoveTimer 是一个 QTimer* 类型的静态变量,用于对玩家的移动计时。 定义了一个宏 #define MOVE_FLASH 26,playerMoveTimer 每 MOVE_FLASH 毫秒发送一次信号,调用相应槽函数,使玩家移动一步(一次)。玩家移动一次的方法是 Player 类中的:void moveStep();
六、 class Triangle

用静态常量类型存放一些特殊向量。
  1. // 特殊向量
  2. class Triangle {
  3. public:
  4.     static const QPointF right_vec ;
  5.     static const QPointF left_vec  ;
  6.     static const QPointF up_vec    ;
  7.     static const QPointF down_vec  ;
  8.     static const QPointF up_right  ;
  9.     static const QPointF up_left   ;
  10.     static const QPointF down_right;
  11.     static const QPointF down_left ;
  12. };
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

星球的眼睛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表