Java 如何创建包含不同类的集合以随机选择一个

Java 如何创建包含不同类的集合以随机选择一个,java,Java,我正在尝试做一个TD游戏,我遇到了一个小问题。我想随机选择波浪类型。我创建了不同的类,每个类代表不同的怪物类型(例如快速、坚韧等)。现在的问题是,我如何选择随机类型?我想把所有的怪物类型(不同的类)放入某种集合中,然后随机抽取一个,创建一个这种类型的对象,但我不知道怎么做。好的,我会通过创建类WaveParameters来实现,其中包含每波怪物的数量、速度、生命等等 然后用不同的数据创建这个类的一些实例,例如将它们添加到ArrayList,然后从中随机选择。有很多不同的方法可以做到这一点。创建一

我正在尝试做一个TD游戏,我遇到了一个小问题。我想随机选择波浪类型。我创建了不同的类,每个类代表不同的怪物类型(例如快速、坚韧等)。现在的问题是,我如何选择随机类型?我想把所有的怪物类型(不同的类)放入某种集合中,然后随机抽取一个,创建一个这种类型的对象,但我不知道怎么做。

好的,我会通过创建类
WaveParameters
来实现,其中包含每波怪物的数量、速度、生命等等


然后用不同的数据创建这个类的一些实例,例如将它们添加到
ArrayList
,然后从中随机选择。

有很多不同的方法可以做到这一点。创建一个枚举。或者是一系列的课程。或字符串列表。或者使用随机数生成器

你能生成一个介于1和10之间的数字吗?你能用if语句根据这个数字的值做不同的事情吗?你能创造一种特殊的波浪类型吗?好吧,那么你需要做的就是把这些想法结合起来

更一般地说,我不知道为什么不同类型的怪物是不同的职业。听起来你应该有一个敌人类,它的类型有属性。但这是一个设计决策,由您决定。

我认为有两种方法:

1) 把你所有的怪物类放在一个数组中:
MonsterType[]types={Gnome.class,Gob.class}…
,随机选择一个索引来获取其中一个类,并用
class.newInstance()实例化它

2) 创建一个代表怪物类型的枚举,然后随机选择其中一个值,并根据怪物类型使用开关盒构建怪物


第二种方法对我来说似乎更干净。

基本上你已经描述了一种方法:

我想把所有的怪物类型(不同的类)放到某种集合中

使用
列表
或类似工具。根据您的需要,此列表将包含带有参数的对象,或者,如果行为非常不同,则包含作为工厂参数的枚举或工厂类本身

。。。然后随便拿一个

使用
list.get(random.nextInt(list.size())
生成一个随机int,即在列表中生成一个随机索引并访问该索引处的元素

。。。并创建该类型的对象

同样,这取决于你的需要。如果使用参数对象,则将其传递给波形生成器;如果列表包含枚举,则调用波形工厂方法并传递枚举;如果列表包含工厂类,则对该类调用
newInstance(…)


有更多(和更优雅)的方法来实现这一点,但正如前面所说,这取决于您的需求和应用程序架构。

将怪物类型表示为枚举,然后随机选择其中一个值。我不会给出代码。您不需要我的任何代码,我也不希望任何代码作为答案,只是一种方法。如果您不能仅使用枚举,请将类放入可排序集合,生成范围为[0,size\u of\u collection]的随机整数[并在该索引处获取类。然后创建该类的实例。对不起,我没有看到您是初学者。请知道,在不显示您尝试了什么的情况下提问是获得大量-1的一种方式。我不关心-1=)我只想要一个答案我认为这是一个好主意,因为有些怪物会有“特殊效果”,如果有一个类包含这些特效,那将是一团乱麻。我认为有一堆不同的类代表相同的信息是一团乱麻,但这取决于你。@user3801714你可以使用合成,也就是说,在需要时使用一个参数来选择一个或多个特效,而不是将它们编码到monster c中姑娘们。