在RTS游戏中,我应该为单位选择选择哪种数据类型?

时间:2019-04-10 21:26:12

标签: python types protocol-buffers abstract-data-type

在rts中,什么是单元集合的良好数据类型? 我为an api that lets you write bots for the strategy game Starcraft2 in Python作了贡献。

现在there is a class units继承自list。每帧都会创建一个新的units对象,然后选择这些单位,从而创建新的units对象,例如,为所有敌方单位或所有飞行单位设置一个过滤器。

我们使用这些选择来找到最接近的敌人来控制我们的部队,选择可以立即进攻或需要不同命令的部队,等等。

但这也意味着我们需要花费很多时间来按每个帧中每个单元的属性进行大量过滤。单独初始化一个units对象的时间为2e-5到5e-5秒,我们每场游戏进行数百万次,这不仅会减慢bot的速度,而且还会进行大量测试,此外还有循环过滤的过程units对象中的每个单元。

是否有更好的解决方案? 也许不需要在一帧中为每次选择每次都重新创建某些东西,而只是从我们从协议缓冲区中获得的所有单元的初始列表开始,然后可以应用选择和过滤器而无需重新创建对象?什么是实现此目的的好方法,以使每帧多次过滤不会那么慢和/或复杂?

1 个答案:

答案 0 :(得分:0)

这听起来根本不是ADT问题。这听起来像是编程效率低下。我们不可能告诉您正确的信息以实现您的目标。

如果您实际上不需要修改UnitView的数据,那么您可能应该研究的是如何构造unit。考虑类似于字典在Python 3中如何返回views的事情。See here for more details