生活随笔
收集整理的这篇文章主要介绍了
设计模式-开宝箱
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
一个开宝箱游戏的基本描述为:游戏中有多种类型的人物(Role),如战士(Solider)、魔法师(Mage)等,主角的类型只能选择其中一种,且游戏中不再更改。游戏中还有各种宝箱(Box),如装有不同数目金钱的宝箱、装有毒物的宝箱等。当任一种类型的主角打开装有金钱的宝箱时,宝箱中的金钱会增加给主角,同时宝箱的金钱数目变成0;当战士打开装有毒物的宝箱时,战士的生命值(HP)会减少10%,但金钱(Money)增加20%;当魔法师打开装有毒物的宝箱时,魔法师的生命值(HP)会减少30%,但金钱(Money)增加40% 。请根据上述描述,给出相应类的设计并完整实现,要求你的设计应具有良好的扩展性,如增加新角色类型及箱子种类时,不需要修改已有的设计及实现。
实现代码如下:
class Box;
class Role {
public:Role(int theMoney,int theHP):money(theMoney),hp(theHP) { }virtual ~Role( ) {}int GetMoney( ) const { return money;}void SetMoney(int m) { money = m; }void Open (Box& aBox) { aBox.BeOpened(*this); }virtual void PoisonHurt( ) = 0;
protected:int money;int hp;
};
class Solider:public Role {
public:Solider(int theMoney,int theHP):Role(theMoney,theHP) { }virtual void PoisonHurt( ) {hp *=0.9;money *=1.2;}
};
class Mage:public Role {
public:Mage (int theMoney,int theHP):Role(theMoney,theHP) { }virtual void PoisonHurt( ) {hp *=0.7;money *=1.4;}
};
class Box {
public:virtual ~Box( ) {}virtual void BeOpened(Role& role) = 0;
};
class MoneyBox:public Box {
public:MoneyBox(int m):boxMoney(m) { }virtual void BeOpened(Role& role) {role.SetMoney(role.GetMoney( ) + boxMoney );boxMoney = 0;}
protected:int boxMoney;
};
class PoisonBox:public Box {
public:virtual void BeOpened(Role& role) { role. PoisonHurt ( ); }
};
总结
以上是生活随笔为你收集整理的设计模式-开宝箱的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。