如何实现动态选择?

时间:2015-04-11 02:34:01

标签: java algorithm

我正在制作一款策略游戏AI。具体来说,我使用BWMirror java库制作星际争霸:BroodWar zerg AI。

我遇到了单位管理方面的问题。玩家在他的处置中有一些单位,让我们说List<Unit>这样的内容:

Offset Name     Position
0.     Drone    [Worker]
1.     Drone    [Worker]
2.     Zergling [Fighter]
3.     Hatchery [Building]
4.     Drone    [Worker]
5.     Larva    [Passive]

某些功能显然只适用于单位子集。我已经实现了一个方法,从主列表中选择子集并将其作为新列表返回。对于工人,我得到:

Offset Name     Position
0.     Drone    [Worker]
1.     Drone    [Worker]
2.     Drone    [Worker]

现在,如果其中一个工作人员从原始列表中删除(例如,因为它已经死亡),它将保留在此子列表中。有两种可能的解决方案,我也不喜欢:

  1. 每次需要时生成选择列表。
  2. 指定一些事件回调以删除它们所在的所有列表中的项目。
  3. 我的问题是:是否有任何类型的数据存储可以让我进行子选择但允许我保持数据同步?

    这意味着我有两个Iterable个对象,一个包含所有单位,其他包含工人。从所有单位中删除工作人员也会使其从工人身上消失,而不会有任何回调。

1 个答案:

答案 0 :(得分:2)

我认为你只有你列出的2个选项,而且我认为你的第一个选项最有意义。

只有在需要时才懒惰地生成列表会节省很多周期。海军陆战队(如你自己)的一个刺激可能会杀死大量的小狗,你真的不想为每一个死去的小狗发送信息。在你需要的时候看看你剩下的东西会好得多。