嗯,我正在开发一个模拟,部落(团体)中的特工可以在固定大小的 map 中竞争他们拥有多少区域。( map 是二维 map )。他们通过分组互相战斗来进行竞争,获胜的一组获得另一组的所有权。这个模拟是用java编写的。
我试图得到一些想法的主要问题是我应该如何存储每个组拥有多少 map 。起初我想只使用 Dimension 的一个实例,然后每次一组代理获胜时它将其添加到维度中的区域。然而,问题是所拥有的区域可以位于 map 中的任何位置,区域之间有间隙,如下图所示。(抱歉,图片很差,我正在尝试使用 gimp 绘制问题)
注意:不同颜色的矩形代表代理拥有的区域,而紫色圆圈代表代理本身。
现在另一个想法是使用 Dimension 类型的 ArrayList 来保存特定部落代理拥有的所有区域。
但我在想是否有更好的方法来做到这一点。
最佳答案
每个部落之间以及该部落拥有多少个区域之间存在一对多(技术上是一对零或多对)关系。您有 3 种基本选择来表示任何一对多关系。
1. You can place a reference in each child to the parent
2. You can manage a list of children in each parent
3. You can manage a list of parent-child pairings separately
我要问自己的问题是,您想从模拟中得出什么结果?从那里开始并向后工作。例如,如果您的目标是按部落报告所拥有的 Assets ,那么管理每个部落对象内的区域列表可能是最有效的方法。如果您的目标是显示谁拥有每个区域的区域报告,那么引用每个区域的对象内的拥有部落可能会更简单。如果您支持多个 View ,那么在两个地方进行管理也可能是合理的。
第三个选项,管理对象本身之外的关系,在也可能支持多对多关系的情况下最有用,例如允许玩家成为多个部落的成员。
关于java - 表示(存储)区域面积的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14550086/