欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > asp.net >内容正文

asp.net

设计模式-开宝箱

发布时间:2024/1/8 asp.net 56 豆豆
生活随笔 收集整理的这篇文章主要介绍了 设计模式-开宝箱 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一个开宝箱游戏的基本描述为:游戏中有多种类型的人物(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 ( ); } };

 

总结

以上是生活随笔为你收集整理的设计模式-开宝箱的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。