设计一个接口,里面有各种游戏成就所需的信息查询方法。
把成就系统作为一个基类。每一个成就作为子类。
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{
...
};游戏关卡类继承成就接口,实现接口方法提供查询信息。
在游戏关卡开始时,根据每一个关卡的配置信息,载入不同的游戏成就类。并且设置监视的对象。
void start_game{
GameLevel *gameLevel = new GameLevel;
//添加不同的成就监视类
IAchievement *achievement = new AchievementA;
achievement->set_game_level(gameLevel);
...
}
void update(){
//不断的更新所有成就类
...
}这些游戏成就类作为监视器。在更新函数中,利用接口搜集关卡中自己感兴趣的信息,一旦符合自己的条件,就可以解锁成就,做出反应比如向关卡类发送消息。提示成就解锁。