我试图制作TD游戏,但我遇到了一些问题。我希望随机选择波形类型。我创建了各种类,每个类代表不同的怪物类型(例如快速,强硬等)。现在的问题是,我如何选择随机类型?我想将所有怪物类型(不同类)放入某种集合中,然后随机取出一个,并创建该类型的对象,但我不知道该怎么做。
答案 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(...)
。
有更多(更优雅)的方法,但正如已经说过的,这取决于您的需求和应用程序架构。