/*
* 備忘錄模式
*/
#include <myhead.h>
//保存值
class mySavevalue
{
public:
mySavevalue(string user_name = "",
int life_value = 100,
int magic_point = 100,
int rank_values = 1,
int experience_value = 1000)
:_user_name(user_name),
_life_value(life_value),
_magic_point(magic_point),
_rank_values(rank_values),
_experience_value(experience_value)
{
}
mySavevalue& operator=(const mySavevalue &savevalue)
{
_life_value = savevalue._life_value;
_magic_point = savevalue._magic_point;
_rank_values = savevalue._rank_values;
_experience_value = savevalue._experience_value;
return *this;
}
public:
string _user_name; //用戶名(或用戶id(md5值))
int _life_value; //紅血
int _magic_point; //藍學
int _rank_values; //等級
int _experience_value; //經驗值
//其它值
};
//遊戲角色
class Role
{
public:
Role(string user_name,
int life_value,
int magic_point,
int rank_values,
int experience_value)
:_user_name(user_name),
_life_value(life_value),
_magic_point(magic_point),
_rank_values(rank_values),
_experience_value(experience_value)
{}
mySavevalue Save() //保存當前值
{
mySavevalue savevalue(_user_name,
_life_value,
_magic_point,
_rank_values,
_experience_value);
return savevalue;
}
void Loadvalue(mySavevalue &savevalue) //載入之前的值
{
_life_value = savevalue._life_value;
_magic_point = savevalue._magic_point;
_rank_values = savevalue._rank_values;
_experience_value = savevalue._experience_value;
}
void Show()
{
cout << "用戶 : "
<< _user_name.c_str()
<< ", 等級 : "
<< _rank_values
<< ", 紅血 : "
<< _life_value
<< ", 藍血 : "
<< _magic_point
<< ", 當前經驗值 : "
<< _experience_value
<< endl;
}
void attack() //升級
{
_magic_point -= 10;
_experience_value += 250;
if (_experience_value == 1000)
{
_rank_values += 1;
_experience_value = 0;
}
}
void Being_attacked() //被攻擊
{
_life_value -= 10;
}
private:
string _user_name;
int _life_value;
int _magic_point;
int _rank_values;
int _experience_value;
};
//保存的進度庫
class LookafterSavevalue
{
public:
LookafterSavevalue()
{}
void Save(string name, mySavevalue savevalue)
{
_mapSavevalue.insert(map<string, mySavevalue>::value_type(name, savevalue));
}
mySavevalue Load(string name)
{
return _mapSavevalue[name];
}
private:
multimap<string, mySavevalue> _mapSavevalue;
};
//測試案例
int main()
{
LookafterSavevalue lookaftersavevalue;
Role role("role_wang", 100, 100, 0, 0);
role.Show(); //初始值
lookaftersavevalue.Save("role_wang", role.Save()); //保存狀態
role.attack();
role.Show(); //進攻後
lookaftersavevalue.Save("role_wang", role.Save()); //保存狀態
role.Loadvalue(lookaftersavevalue.Load("role_wang")); //載入狀態
role.Show(); //恢復到狀態0
role.attack();
role.Show(); //進攻後
role.attack();
role.Show(); //進攻後
role.attack();
role.Show(); //進攻後
role.attack();
role.Show(); //進攻後
role.Being_attacked();
role.Show(); //被進攻後
lookaftersavevalue.Save("role_wang", role.Save()); //保存狀態
role.Loadvalue(lookaftersavevalue.Load("role_wang")); //載入狀態
role.Show(); //恢復到狀態1
getchar();
return 0;
}