游戏成就系统实现

⌚Time: 2024-08-28 18:25:00

👨‍💻Author: Jack Ge

设计一个接口,里面有各种游戏成就所需的信息查询方法。

class IAchievement{
    virtual int functionA() = 0;
    ...
};

把成就系统作为一个基类。每一个成就作为子类。

class AchievementBase{
public:
    ...
    void set_game_level(IAchievement *gameLevel){
        m_gameLevel = gameLevel;
    }
    //用于更新
    virtual void update(){}
private:
    IAchievement *m_gameLevel;
};
class AchievementA:public AchievementBase{
    ...
};
class AchievementB:public AchievementBase{
    ...
};

游戏关卡类继承成就接口,实现接口方法提供查询信息。

class GameLevel:public IAchievement{
    ...
    virtual int functionA(){
        ...
    }
};

在游戏关卡开始时,根据每一个关卡的配置信息,载入不同的游戏成就类。并且设置监视的对象。

void start_game{
    
    GameLevel *gameLevel = new GameLevel;
    //添加不同的成就监视类
    IAchievement *achievement = new AchievementA;
    achievement->set_game_level(gameLevel);
    ...

}
void update(){
    //不断的更新所有成就类
    ...
}

这些游戏成就类作为监视器。在更新函数中,利用接口搜集关卡中自己感兴趣的信息,一旦符合自己的条件,就可以解锁成就,做出反应比如向关卡类发送消息。提示成就解锁。

class AchievementA:public AchievementBase{
    ...
    virtual void update(){
        //执行检测和对应动作
        ...
    }
};