我正在开发一个模拟,其中部落(团体)中的代理可以在固定大小的地图中竞争他们拥有的区域的多少。(地图是2D地图)。他们通过小组互相竞争来竞争,获胜小组由另一个小组拥有。这个模拟是用java编写的。
我试图获得一些想法的主要问题是我应该如何存储每个组拥有的地图的数量。首先我只是使用Dimension的实例,然后每次一组代理赢得它将它添加到Dimension的一个区域。然而问题是所拥有的区域可以位于地图中的任何位置,区域之间有间隙,如下图所示。(对不起,图片很糟糕,试图使用gimp绘制问题
注意:不同颜色的矩形表示代理商拥有的区域,而紫罗兰色的圆圈表示代理商本身。
现在另一个想法是让Dimension类型的ArrayList保存特定部落代理所拥有的所有区域。
但我在想是否有更好的方法来做到这一点。
答案 0 :(得分:1)
如果我可以建议你一些事情,当我以前在一些图形相关的东西上工作时,在一篇论文中,我发现了如何将图形转换为地图的想法,对不起,我不记得那篇论文的标题 但我记得,他们正在使用voronoi图, 在这种情况下,您可以将地图数据存储为一组对象,其中包含由代理和团队ID执行的操作坐标
你还可以介绍销售线索,它可能用于解决ovrlaping区域的冲突(区域内90%的销售属于A,因此90%的区域也会给予它们)
答案 1 :(得分:1)
每个部落之间存在一对多(技术上是一对多或多对)的关系,以及该部落拥有多少个区域。您有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
我问自己的问题是你试图从你的模拟得到什么结果?从那里开始,向后工作。例如,如果您的目标是部落报告所拥有的内容,那么管理每个部落对象内的区域列表可能是最有效的。如果您的目标是显示每个人拥有谁的区域的报告,那么在每个区域的对象内引用拥有的部落可能更简单。如果您支持多个视图,在两个地方进行管理也是合理的。
管理对象本身之外的关系的第三个选项对于可能也支持多对多关系的时候最有用,例如允许玩家成为多个部落的成员。