我想知道我的游戏建模难度水平是否合适。
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;
}
}
我想知道是否有更简单的方法可以做到这一点,但同样简单易用。
编辑:有人可以如此友善地向我解释为什么这个问题得到减去选票。这段代码或我的解释有问题吗?感谢。
答案 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;
}
}