【发布时间】:2012-02-15 18:30:47
【问题描述】:
我正在开发一款游戏,用户可以在其中打开/关闭某些效果。这些影响会消耗用户的精力,程序的各个部分必须能够检查影响是否处于活动状态。目前,我正在使用枚举类型来存储和检查效果:
public static enum Effects { SUPER_FIRE, FIRE_SHIELD }
if (someEffect == Effects.SUPER_FIRE) {
// Breath fire etc..
}
这么说,我必须为每个效果存储其他变量 - 例如使用它所需的级别或它消耗能量的速率。所以,我想到的另一种方法是使用一个类:
public class SuperFire extends Effect {
public static int levelRequired = 10;
public static int drainRate = 5;
public boolean active() {
// Check if it's active
}
public boolean activate() {
}
public boolean deactivate() {
}
}
SuperFireEffect sfe = new SuperFire();
sfe.activate();
if (sfe.active()) {
energyLevel -= sfe.drainRate;
}
sfe.deactivate();
哪种实现(或任何其他)最适合这种情况?
【问题讨论】:
-
使用类,面向对象允许您将逻辑放在类中并继承/覆盖它们,而不是在游戏代码中到处传播。
-
请记住enums can have members and methods。如果你使用
enums,像levelRequired这样的“静态”属性可以存储在枚举中。 details about the implementation也可以。 -
另外请记住,为了真正的灵活性,存储有关您的效果的信息,包括您可以使用自省来实例化的类名,可以存储在各种标记语言中,例如 XML 或 YAML。
标签: java class design-patterns