先上最后的效果图:
牛战士使用了大刀,造成了25点伤害,史莱姆王还有125点生命
史莱姆王使用了打空气,没有命中对手,牛战士还有100点生命
牛战士使用了大刀,造成了25点伤害,史莱姆王还有100点生命
史莱姆王使用了打空气,没有命中对手,牛战士还有100点生命
牛战士使用了大刀,造成了25点伤害,史莱姆王还有75点生命
史莱姆王使用了打空气,没有命中对手,牛战士还有100点生命
牛战士使用了大刀,造成了25点伤害,史莱姆王还有50点生命
史莱姆王使用了打空气,没有命中对手,牛战士还有100点生命
牛战士使用了大刀,造成了25点伤害,史莱姆王还有25点生命
史莱姆王使用了打空气,没有命中对手,牛战士还有100点生命
牛战士使用了扎绷带,恢复了20点生命,牛战士还有120点生命
史莱姆王使用了身体攻击,造成了30点伤害,牛战士还有90点生命
牛战士使用了扎绷带,恢复了20点生命,牛战士还有110点生命
史莱姆王使用了身体攻击,造成了30点伤害,牛战士还有80点生命
牛战士使用了扎绷带,恢复了20点生命,牛战士还有100点生命
史莱姆王使用了身体攻击,造成了30点伤害,牛战士还有70点生命
牛战士使用了大刀,造成了25点伤害,史莱姆王还有0点生命
史莱姆王倒下了,牛战士获得了胜利!
Process finished with exit code 0
可以看到这个结果有点小时候在诺基亚手机上玩的那种文字游戏的味道了
策略模式概念
定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
策略模式的使用
HeadFirst中策略模式的使用是基于对鸭子的改造;
其类图如下
在策略模式中主要实现了几个关键的设计原则:
- 找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起
- 针对接口编程,而不是针对实现编程
- 多用组合,少用继承
demo 实现
接下来我们用策略模式实现一个小的demo,实现游戏中人物战斗的功能。
在这个demo中,人物可以装备不同的武器,并且可以使用不同的技能,怪物也有和人物一样的行为,每种怪物的战斗方式都不一样。
类图
设计思路
由类图可见Hero类作为顶级父类,其中组合了技能接口Skill和武器接口Weapon,因此每个英雄都可以自由的替换技能和武器。
在实现类中,我暂时实现了两个英雄类,一个Soldier类,是战士,攻击时有概率使用技能。另一个是Slime类,即史莱姆,作为一个弱鸡怪物&