0

好吧,我正在开发一个模拟,部落(群体)中的代理可以在固定大小的地图中竞争他们拥有多少区域。(地图是 2D 地图)。他们通过分组相互竞争来竞争,获胜的组得到另一组的所有。这个模拟是用java编写的。

我试图获得一些想法的主要问题是我应该如何存储每个组拥有多少地图。起初我只是使用 Dimension 的一个实例,然后每次一组代理赢得一个区域时将其添加到维度中。但是问题是,拥有的区域可以位于地图中的任何位置,区域之间存在间隙,如下图所示。(抱歉,图片不佳,正在尝试绘制问题使用 gimp)

在此处输入图像描述

注意:不同颜色的矩形代表代理拥有的区域,而紫色圆圈代表代理本身

现在另一个想法是拥有一个 ArrayList 的 Dimension 类型,其中包含特定部落代理所拥有的所有区域。

但我在想是否有更好的方法来做到这一点。

4

2 回答 2

1

如果我能给你一些建议,当我之前在做一些与图表相关的事情时,在一篇论文中我发现了如何将图表转换为地图的想法,抱歉我不记得那篇论文的标题,但我记得的是,它们是使用 voronoi 图,在这种情况下,您可以将地图数据存储为一组对象,其中包含代理和团队 ID 执行的操作坐标

还可以引入sales vlume,可以用来解决重叠区域的冲突(区域90%的销售额属于A,所以90%的区域也会给他们)

于 2013-01-27T18:04:51.213 回答
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

我要问自己的问题是,您想从模拟中得出什么结果?从那里开始并向后工作。例如,如果您的目标是按部落报告所拥有的物品,那么管理每个部落对象内的区域列表可能是最有效的。如果您的目标是显示谁拥有每个区域的报告,那么在每个区域的对象内引用拥有部落可能会更简单。如果您支持多个视图,在这两个地方进行管理也可能是合理的。

第三个选项,管理对象本身之外的关系,在可能支持多对多关系的时候最有用,比如允许玩家成为多个部落的成员。

于 2013-01-27T19:04:18.620 回答