建模游戏难度

时间:2015-03-18 12:34:57

标签: java

我想知道我的游戏建模难度水平是否合适。

public abstract class AbstractDifficulty {

    public AbstractDifficulty() {

    }

    public abstract int enemyWaves();
    public abstract int enemiesInWave();
    public abstract long enemyWaveIntervalMilis();
}

然后是几个实现这些方法的子类,例如。

public class EasyDifficulty extends AbstractDifficulty {

    @Override
    public int enemyWaves() {
        return 1;
    }

    @Override
    public int enemiesInWave() {
        return 10;
    }

    @Override
    public long enemyWaveIntervalMilis() {
        return 500;
    }
}

我想知道是否有更简单的方法可以做到这一点,但同样简单易用。

编辑:有人可以如此友善地向我解释为什么这个问题得到减去选票。这段代码或我的解释有问题吗?感谢。

3 个答案:

答案 0 :(得分:4)

您的设计将完成这项工作,但您希望拥有的是容器类。因此,为每个值设置一个方法,使用值和getter获得(最终)字段。它们可以设置为例如在构造函数中。

如果您的难度模式已知且很少,请考虑使用枚举,这是最终的且更易于使用。

enum Difficulty {
    EASY(1, 10, 5000),
    MEDIUM(2, 15, 4000),
    HARD(4, 20, 3500);

    private final int enemyWaves;
    private final int enemiesInWave;
    private final long enemyWaveIntervalMilis;

    Difficulty(int enemyWaves, int enemiesInWave, long enemyWaveIntervalMilis ){
        this.enemyWaves = enemyWaves;
        this.enemiesInWave = enemiesInWave;
        this.enemyWaveIntervalMilis = enemyWaveIntervalMilis;
    }

    public int getEnemyWaves() {

        return enemyWaves;
    }
    public int getEnemiesInWave() {

        return enemiesInWave;
    }
    public long getEnemyWaveIntervalMilis() {

        return enemyWaveIntervalMilis;
    }

}

答案 1 :(得分:2)

一种选择是没有不同的难度等级,但只有一个难度等级,不同的实例是不同的难度(所以,一个类具有属性enemyWaves,enemiesInWave和enemyWaveIntervalMilis,以及不同的实例具有不同的设置)。

答案 2 :(得分:2)

您的解决方案看起来很好。如果你想提高可读性,你可以从抽象类中删除构造函数,因为无论如何它都是由Java创建的。

我也投票支持接口而不是抽象类,除非有特定的理由使用抽象类。

我也觉得对于特定的问题,你不需要不同的类,而是需要同一个类的不同实例。在这种情况下,我将使用构造函数设置的最终字段,然后方法返回值。

public class Difficulty  {

  final private int enemyWaves;
  public Difficulty(final enemyWaves){ this.enemyWaves = enemyWaves; }

  @Override
  public int enemyWaves() {
      return this.enemyWaves;
  }
}