RaceGame-Qt游戏项目构建-游戏控制

RaceGame-Qt游戏项目构建-游戏控制

控制概述

控制类,控制游戏进程,例如游戏读秒、开始游戏、退出游戏、游戏暂停、继续等。玩家可以通过游戏窗口上的按钮控制这些过程。因此链接游戏界面的成员函数要么是公共的槽函数,要么是带有带有 Q_INVOKABLE 声明的函数。 Q_INVOKABLEQT 的宏定义,决定了这个函数可以被 QML 调用。

class GameControl

游戏控制类,控制游戏设置、开始游戏、退出游戏、游戏暂停、继续等。具有各种管理器类的对象指针,用来控制游戏过程。

class GameControl : public QObject {
    Q_OBJECT
    Q_PROPERTY(int playerNum READ getPlayerNum WRITE setPlayerNum NOTIFY playerNumChange FINAL)
    Q_PROPERTY(int mapId READ getMapId WRITE setMapId NOTIFY mapIdChange FINAL)
public:
    GameControl(QQmlContext * context);

    int getPlayerNum();
    void setPlayerNum(int n);
    int getMapId();
    void setMapId(int id);

    void setPlayerContextProperty();
    void setGameMapContextProperty();
    void setToolContextProperty();
    void setBeatControlProperty();
    QList<QString> backgroundColorList;
    std::shared_ptr<playersManager> playerRoot;
    std::shared_ptr<mapsManager> mapRoot;
    std::shared_ptr<ToolsManager> toolRoot;
    std::shared_ptr<playersMove> moveRoot;
    std::shared_ptr<BeatControl> beatRoot;
    QQmlContext * context;
    Q_INVOKABLE void entryGame();
private:
    int playerNum;
    int mapId;
signals:
    void playerNumChange();
    void mapIdChange();
    void refreshmap();
    void overGameSignal();
public slots:
    void startGame();
    void backGame();
    void pauseGame();
    void overGame();
    void continueGame();
    bool getToolClick(int playerId);
    void toolClick(int playerId);
    void turnNext();

    bool chosePreMap();
    bool choseNextMap();
    bool addPlayer();
    bool removePlayer();
};

class BeatControl

节拍管理器,用于控制游戏过程中存在的读秒过程。例如玩家获取工具之后,需要在 PRE_LAUNCH_SEC 之内释放,否则该管理器会自动将玩家的工具释放。

// 不具体实现功能 只发出信号
// 节拍管理器 singleton
class BeatControl : public QObject {
    Q_OBJECT
    Q_PROPERTY(int preLaunchSecond READ getPreLaunchSecond WRITE setPreLaunchSecond NOTIFY preLaunchSecondChanged FINAL)
public:
private:
    BeatControl();
    static std::shared_ptr<BeatControl> btControl;
    QTimer * preLaunchTimer;
    int preLaunchSecond;
public:
    int getPreLaunchSecond();
    void stopPreLaunchTimer();
    void startPreLaunchTimer();
    void setPreLaunchSecond(int second);
    static std::shared_ptr<BeatControl> getInstance();
signals:
    void preLaunchSecondChanged();
    void toolAutoLaunchSgn();
};
posted @ 2025-01-30 13:48  北纬31是条纬线哦  阅读(60)  评论(0)    收藏  举报