首先,我不知道这是否是问题的正确名称。我找不到一个不太长的更好的。 我正在用Java编写RPG游戏,我刚开始编写一个随机级别的生成器。我的想法是创建一些枚举类型(让我们称之为DungeonStyle),其中包含生成器创建关卡所需的所有信息。作为示例,该信息包括房间和走廊的密度。 我想要在这个枚举类型中存储的另一个信息是,Spawner Tile可以在这样的级别内生成哪些生物。我还必须说,我实施生物的方式是为每个从Creature类继承的特定生物制作一个类。现在我将解释这个问题(适用于任何类型的非静态对象,而不仅仅是生物)。
我可以通过DungeonStyle找到将可能的生物分开的唯一方法是在SpawnerTile代码中。我会将DungeonStyle作为参数传递给SpawnerTile的构造函数,并在spawn()方法中进行区分。像这样:
if (style == Style_A) {
level.add(new Creature_A());
}
if (style == Style_B) {
level.add(new Creature_B());
}
这样可以正常工作,但显然不是我想要的。生物信息不是里面的 DungeonStyle。它是在它之外创建的。我只是找不到在DungeonStyle中存储可能的类(生物)的方法来制作它们的实例。我认为我的问题与“&lt;&gt;”有些相关当我们创建ArrayList< some_object>
时。
答案 0 :(得分:0)
您可以使用可能的怪物枚举,执行类似
的操作abstract class MonsterAbstract {//Class that all Monsters extend
....
}
enum Monster {
FOO, BAR;
public MonsterAbstract spawn() {
switch(this) {
case FOO: return new Foo();
case BAR: return new Bar();
default: return null; //should never get here
}
}
}
void SpawnerTileSpawn(Set<Monster> allowedMonsters) {//allowedMonsters stored within DungeonStyle
for (Monster m : allowedMonsters) {
m.spawn();
}
}