找回密码
 立即注册
首页 资源区 代码 RaceGame-Qt游戏项目构建-游戏框架

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

明思义 7 天前
RaceGame-Qt游戏项目构建-游戏框架

游戏企划

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

1.png

2.png

3.png

4.png

宏定义

游戏使用RaceGame的命名空间,后续的代码省略不标注。以下是一些全局宏定义,单独放在头文件 GlobalMacros.h 中。
  1. namespace RaceGame {
  2. #define MapWidth 45  // 地图宽度
  3. #define MapHeight 73 // 地图高度
  4. #define PLAYER_DFT_SPEED 4 // 玩家默认移速
  5. #define PLAYER_MAX_SPEED 6 // 玩家最大移速
  6. #define PLAYER_MIN_SPEED 1 // 玩家最小移速
  7. #define MOVE_FLASH 26 // 运动帧率
  8. #define MAX_MAP_NUM 4 // 最大地图数量
  9. #define MAX_PLR_NUM 4 // 最大玩家数量
  10. #define PRE_LAUNCH_SEC 10 // 获取道具之后 PRE_LAUNCH_SEC 秒后自动释放
  11. }
复制代码
Player相关类

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

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

抽象类,使用单例模式的玩家管理类,通过这个类暴露的接口创建玩家对象createPlayer(int memberNum = 1)、销毁玩家对象destoryPlayer(),并管理玩家的轮流计数trunNextPlayer()。
  1. // singleton
  2. class playersManager : public QObject {
  3.     Q_OBJECT
  4.     Q_PROPERTY(int PlayerTurn READ getplayerTurn NOTIFY trueNextSignal FINAL)
  5.     Q_PROPERTY(QList<int> reachPlayerId READ getReachPlayerId NOTIFY reachPlayerIdChanged FINAL)
  6. private:
  7.     static std::shared_ptr<playersManager> playerMgr;
  8.     playersManager();
  9. public:   
  10.     int PlayerTurn;
  11.     int nemberNum;
  12.     int trunNextPlayer();
  13.     void destoryPlayer();
  14.     void createPlayer(int memberNum = 1);
  15.     void playerReach(int id);
  16.     void allPlayerReach();
  17.     int getplayerTurn();
  18.     QList<int> reachPlayerId;
  19.     QList<int> getReachPlayerId() {return this->reachPlayerId;}
  20.     QList<std::shared_ptr<Player>> PlayerList;
  21.     static std::shared_ptr<playersManager> getInstance();
  22. signals:
  23.     void trueNextSignal();
  24.     void reachPlayerIdChanged();
  25.     void allPlayerReachSgn();
  26. public slots:
  27. };
复制代码
三、 class playersMove

抽象类,玩家移动管理器,用于计时玩家的移动。由于不需要创建多个管理器对象,这个类也使用单例模式设计。
  1. // singleton
  2. class playersMove : public QObject {
  3.     Q_OBJECT
  4. private:
  5.     static std::shared_ptr<playersMove> moveMgr;
  6.     QTimer * playerMoveTimer;
  7.     playersMove();
  8. public:
  9.     static std::shared_ptr<playersMove> getInstance();
  10.     void startTimer();
  11.     void stopTimer();
  12.     void move(std::shared_ptr<Player>& player);
  13.     void stop(std::shared_ptr<Player>& player);
  14. };
复制代码
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. };
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册