我正在编写一个太空侵略者游戏,我需要编写5个公共实例变量,这些变量包含用于收集有关一次游戏运行的所有信息的集合:

spaceShips将按它们在屏幕上出现的顺序引用一个SpaceShip列表。


  公共列表空间


眨眼即是镜头,这些镜头将按照发生的顺序引用所有Blink实例的列表


  公共列表闪烁;


hitsMap,它将引用地图,谁的键将是被眨眼命中的太空飞船的实例,其值将是对应于“成功的”眨眼实例的列表


  ????


毫发无损,它将引用所有眨眼未“命中”的SpaceShip实例的列表


  ???


未命中,它将引用未“击中”任何太空飞船的所有Blink实例的列表


  ???


然后,我必须向构造函数中添加行,以将HashMap的新实例分配给hits map,并将ArrayList分配给其他变量,到目前为止,我已经


  spaceShips = new ArrayList();
  闪烁=新的ArrayList();


任何帮助都会很棒

干杯

最佳答案

在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(或者可能是对它确实命中的太空飞船的引用)。这样,相关信息将位于受影响的对象实例中,您可以在spaceShipsblinks列表上使用简单的过滤器来获取其他三个列表/映射。

请注意您的命名。 “眨眼”不应该是“导弹”还是“射击”?

10-08 13:08