我正在编写一个太空入侵者游戏我需要编写5个公共实例变量,这些变量包含记录有关游戏运行的所有信息的集合:
spaceShips将按照它们出现在屏幕上的顺序引用SpaceShip列表
public List spaceShips;
闪烁是将按照发生的顺序引用所有Blink实例列表的镜头
公开列表闪烁;
hitsMap将引用一张地图,其中的键将是Spaceship的实例,其中闪烁命中,其值将是相应的“成功”闪烁实例的列表
????
unscathed,它将引用未被任何闪烁“击中”的所有SpaceShip实例的列表
???
未命中,这将引用一个没有“击中”任何宇宙飞船的所有Blink实例的列表
???
然后我必须在构造函数中添加一行来分配一个新的HashMap实例来命中map和ArrayList到其他变量,到目前为止我还有
spaceShips = new ArrayList(); blinks = new ArrayList();
任何帮助都会很棒
欢呼声
答案 0 :(得分:2)
在Java 5及更高版本中,您可以使用泛型使您的生活略微更简单。使用这些定义:
public List<SpaceShip> spaceShips = new ArrayList<SpaceShip>();
public List<Blink> blinks ...;
public Map<SpaceShip, List<Blink>> hitsMap = new HashMap<SpaceShip, List<Blink>>();
public List<SpaceShip> unscathed ...;
public List<Blink> misses ...;
要添加匹配,请使用以下代码:
public void addHit(SpaceShip ship, Blink blink) {
List<Blink> hits = hitsMap.get(spaceShip);
if(null == hits) {
hits = new ArrayList<Blank>();
hitsMap.put(spaceShip, hits);
}
hits.add(blink);
}
那就是说,我建议稍微不同的API:向SpaceShip
添加一个“命中”列表,并向hit
添加一个布尔字段Blink
(或者可能是对它所命中的太空船的引用) {1}}。这样,相关信息将位于受影响的对象实例中,您可以使用spaceShips
或blinks
列表上的简单过滤器来获取其他三个列表/地图。
记住你的命名。不应该“闪烁”是“导弹”还是“射击”?
答案 1 :(得分:0)
一些一般性观点,因为这个作业(至少,我认为如此 - 随意澄清是否不是这样)。
List<SpaceShip> spaceShips
public
(尽管如此,我还没有看到你们其余的代码,所以也许有充分的理由说明你已经这样做了)您已经说过,hitsMap
变量应该是Map
的一个实例,但稍后您说它必须是HashMap
。因此,除了宣布Map<SpaceShip, List<Blink>> hitsMap = new HashMap<SpaceShip, List<Blink>>();
对于您的misses
列表,首先要复制所有太空飞船的列表(可能是通过Collections.copy?)。当每个SpaceShip
被点击时,请将其从misses
列表中删除。
您的misses
列表应该只是一个List<Blink>
,只要您确定有问题的Blink
是否错过或点击,就会添加Blink
个对象(在这种情况下,您)必须编辑hitsMap
。
答案 2 :(得分:0)
您还应该记住,您可以使用继承,并以这种方式定义具有相同行为的类组或与其他对象的交互。
在设计面向对象的游戏时,你应该始终记住,某些图形表示会移动,有些则不会,有些会破坏其他,有些会经过其他,有些则不会。 (可能有不同的优先事项)。
另外,我举了一个PacMan游戏的例子(还有什么:p)你必须记住一些游戏实体可以拥有状态(如Pacman godmode,或Pacman易受攻击,对Ghosts相反)。因此,制作一个共同的抽象类的Ghosts和Pacman(它们是移动/状态相关的)孩子的想法。
希望这有帮助!