备忘录模式
前序
相信玩游戏每个人都会,今天就来讲讲关于游戏进度的保存机制,也就是备忘录模式。
备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,兵在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
实现方式(UML类图)
实现代码
#include <stdio.h>
// 角色状态存信息
class RoleStateMemento
{
public:
int vit;
int atk;
int def;
int level;
int pass;
RoleStateMemento(int _vit, int _atk, int _def, int _level, int _pass) : vit(_vit), atk(_atk), def(_def), level(_level), pass(_pass){}
};
// 游戏角色
class GameRole : public RoleStateMemento
{
public:
GameRole() : RoleStateMemento(100, 100, 100, 1, 1) {}
RoleStateMemento* SaveState()
{
return new RoleStateMemento(vit, atk, def, level, pass);
}
void RecoveryState(RoleStateMemento* pMemento)
{
vit = pMemento->vit;
atk = pMemento->atk;
def = pMemento->def;
level = pMemento->level;
pass = pMemento->pass;
}
void Fight()
{
vit -= 20; // 第一关损失了20点血
pass++;
vit -= 40; // 第二关损失了40点血
level++; // 升级了
atk++;
def++;
pass++;
vit = 0; // 第三关直接被Boss干掉了
}
void StateDisplay()
{
printf("当前血量: %d\n", vit);
printf("当前攻击力: %d\n", atk);
printf("当前防御力: %d\n", def);
printf("当前等级: %d\n", level);
printf("当前关卡: %d\n\n", pass);
}
};
// 角色状态管理者
class RoleStateCaretaker
{
public:
RoleStateMemento* pMemento;
};
int main()
{
// 大战Boss前
GameRole* lixiaoyao = new GameRole();
// 保存进度
RoleStateCaretaker* stateAdmin = new RoleStateCaretaker();
stateAdmin->pMemento = lixiaoyao->SaveState();
// 大战Boss时,直接被干掉了
lixiaoyao->Fight();
lixiaoyao->StateDisplay();
// 恢复之前的进度
if(lixiaoyao->vit == 0)
{
lixiaoyao->RecoveryState(stateAdmin->pMemento);
lixiaoyao->StateDisplay();
}
delete stateAdmin->pMemento;
delete stateAdmin;
delete lixiaoyao;
return 0;
}
运行结果
所有文件打包下载
posted on 2011-11-13 23:48
lwch 阅读(2687)
评论(1) 编辑 收藏 引用 所属分类:
设计模式