Java - 处理游戏中可切换效果的最佳方法

标签 java class design-patterns

我正在开发一款游戏,用户可以在其中打开/关闭某些效果。这些效果会消耗用户的精力,并且程序的各个部分必须能够检查效果是否处于 Activity 状态。目前,我正在使用枚举类型来存储和检查效果:

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();

哪种实现(或任何其他实现)最适合这种情况?

最佳答案

在任何情况下我都不愿说“最好”,但从这个词的“更灵活”的含义来看,你的第二个例子似乎是“更好”。

当然,从您的非常小的代码片段来看,您并没有很好地封装功能,因此看起来您可能希望先做一些更多的设计工作。

最后,您希望游戏代码根据 Effect 基类及其功能进行思考,而不必了解 SuperFireEffect 之类的实现。

关于Java - 处理游戏中可切换效果的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9299136/

相关文章:

java - 如何改进 builder 模式?

java - 如何修复 int 到二进制字符串中的错误

java - Hibernate无法正确写入数据到mysql

java - 解析 owl 文件

PHP:为父类设置变量

C++通过字符串构造类

python - Django - 使用字符串从查询集中调用属性

java - 在 JasperReports 5.6.1 中打印二维码

java - Clean Code : Dependency Injection forces procedural code, 如何重构

scala - 使用带模式匹配的过滤器