我试着做一个在我的游戏中代表冠军能力的类。我面临的障碍是,我不知道如何设计一个具有多种属性的能力类,即破坏性、晕眩、减速。我的想法是创建表示所有这些属性的enum类,然后将它们分配给我的能力,例如:
public enum Effect {
DAMAGE,
SLOW,
STUN,
...
}但是如果我有一种同时晕眩和造成伤害的能力呢?我是应该创建一个Effect[]数组并以某种方式来处理它,还是应该创建像Serializable这样的界面标记(这是我有过的最令人讨厌的想法)?或者也许有什么技术可以解决这种情况?
发布于 2014-09-27 10:52:49
一个带有Effect对象的数组看起来很好,一个列表就更好了。您甚至可以创建自己的包装类,以提供基于应用效果计算实体属性的其他方法。
例如:
public class Effects
{
public int calculateDamage(int baseDamage)
{
int damage = baseDamage;
if (effects.contains(Effect.DAMAGE)) {
// some effect stacking :)
damage *= 1.5 * Collections.frequency(effects, Effect.DAMAGE);
}
if (effects.contains(Effect.STUN)) {
damage = 0;
}
return damage;
}
private final List<Effect> effects = new ArrayList<>();
}Collections.frequency()是来自http://commons.apache.org/proper/commons-collections/的实用方法,我强烈推荐它。
发布于 2014-09-27 10:41:46
您可以创建一个类型效果类,将所有属性都作为布尔属性,然后根据您的需要将它们赋值为true或false,如果您希望将属性扩展到您在编译时无法决定的属性,请考虑将hashmap类型的哈希映射放到实际类中。
https://stackoverflow.com/questions/26073509
复制相似问题