策略模式
看到这里,觉得策略模式是我见过最有用的啦。
我们遇到很多很复杂的东西,就用策略模式来处理。
有哪些复杂的东西呢!
比如公式计算。不同的职业的魔法抗性不同,有些技能扣血的方式也不一样。要如何做到简单的分离各种不同的计算方法,让玩家去挑选一个组的。
就像游戏中的例子是考虑到了人物 和 怪物,虽然同为character,但计算时候有如下分别:
- 敌人会有机会暴击增加额外攻击力。
- 玩家可以通过兵营来升高自己的生命力。
策略模式就是,建立敌人和玩家各自的策略。策略继承策略类。
策略父类有着一些会被调用的计算方法,而敌人策略子类就需要实现这个方法。
为了使得数值是正确的,所以敌人策略子类也需要知道这个保存着各类初始化数值的类,我们叫它属性类。
(突然疑问:这个类是一开始告知它还是后来每次计算是传入?这关系到是否只需要创建一个策略类。)
属性类也有父类。属性类被Icharacter所拥有。属性类父类规定了一些每个character都通用的值。
属性类的子类一开始规定了一些数值。
属性类也有方法,方便统一不同的策略类接口
当然,属性子类一开始也可以只规定一些声明。
然后在属性子类调用策略类时,策略类可以自己去更新这些数值的初始值!
最后,在Icharacter中,在正常的流程顺序中,比如attack
就有SetWeaponAtkPlusValue(m_Attribute.GetAtkPlusValues());
WeaponAttackTarget(Target);
其中的m_Attribute.GetAtkPlusValues()就引用了属性类中的对应函数,而这个函数的会返回:
return m_AttrStrategy.GetAtkPlusValue(this);
this传进去,是方便它来计算。
结束。
策略模式与状态模式
策略和状态看似相似:
- 策略是Icharacter知道着attr类。状态是Icharacter知道着state类。
但不同在于:
- 状态的state类可以通过调用icharacter类,将icharacter的state改成别人。而策略就定死了的,不能转移。
- 策略类的扩展只需要重新定义属性类(有一个新怪物)或者新的策略类~就可以搭配出新的方式。不像是state模式,每次加一个模式都需要考虑到和其他模式之间的关系。
课后习题
- 载具这个积累时间。也可以。嗯,把有着积累时间的类给策略类去计算即可。
本文探讨了策略模式在游戏开发中的应用,特别是在处理复杂的公式计算和角色属性时的作用。通过实例说明策略模式如何帮助简化游戏中的角色和怪物的攻击、防御等计算方法,以及与状态模式的区别。
1860

被折叠的 条评论
为什么被折叠?



