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

时间:2014-07-03 13:32:04

标签: java

我试图制作TD游戏,但我遇到了一些问题。我希望随机选择波形类型。我创建了各种类,每个类代表不同的怪物类型(例如快速,强硬等)。现在的问题是,我如何选择随机类型?我想将所有怪物类型(不同类)放入某种集合中,然后随机取出一个,并创建该类型的对象,但我不知道该怎么做。

4 个答案:

答案 0 :(得分:1)

我看到两种方式:

1)将所有怪物类放在一个数组中:MonsterType[] types = {Gnome.class, Gob.class}...,随机选择一个索引以获取其中一个类并使用Class.newInstance();实例化

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

第二个对我来说似乎更清洁。

答案 1 :(得分:0)

好的,我会通过创建类WaveParameters来实现这一目标,每个波浪的数量为怪物,速度,马力,......

然后只使用不同的数据创建此类的一些实例,例如将它们添加到ArrayList<WaveParameters>,然后从中随机选择。

答案 2 :(得分:0)

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

你能产生1到10之间的数字吗?你可以使用if语句根据该数字的值做不同的事情吗?你能创建特定波的类型吗?好的,那么你需要做的就是结合这些想法!

更一般地说,我不确定为什么不同类型的怪物是不同的类别。听起来你应该拥有一个具有其类型属性的Enemy类。但这是一个设计决定,取决于你。

答案 3 :(得分:0)

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

  

我想将所有怪物类型(不同类别)放入某种集合......

使用List<MonsterType>或类似内容。根据您的需要,此列表将包含带参数的对象,或者,如果行为完全不同,则将枚举作为工厂的参数或工厂类本身。

  

......然后随意抽出一个......

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

  

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

同样,这取决于您的需求。如果使用参数对象将它们传递给wave生成器,如果列表包含枚举,则调用wave工厂方法并传递枚举,如果列表包含工厂类,则在该类上调用newInstance(...)

有更多(更优雅)的方法,但正如已经说过的,这取决于您的需求和应用程序架构。