前提
我随机生成一个二维mazelike结构。归结为在网格中随机生成一堆房间,然后使用A *随机连接这些房间和走廊。房间的墙壁占据了网格中的整个广场。我遇到的问题是创建这些墙。
为了决定在哪里放置随机生成的房间,我开始将网格分成一堆不同大小的矩形单元格,这些单元格彼此相邻,使用大小为1的单元格填充它们之间的剩余间隙。之后,我选择一组随机的这些单元格作为房间。如果任何所选单元彼此相邻,则将它们组合以形成单个房间。到目前为止,该算法运行良好。
实施例
问题
我遇到的问题是当我想要遍历定义其中一个房间的墙的每个方格时。现在发生的是,我为每个房间创建了一个Area,并添加了该房间区域所需的每个单元格。我成功地使用PathIterator来遍历Area的大纲。唯一的问题是迭代器的结果不是我想要的结果。
例如,假设一个带有coördinate(5,5)和大小(4,6)的矩形。我想要迭代的结果如下:
相反,我最终得到以下内容:
换句话说,区域内部可以被视为 或的每条线包含到区域,并且区域中低于或到的每一行都独占到区域(由 Area.contains 功能)。
现在解决这个问题在处理简单的方块时可能看起来微不足道,但是一旦我开始尝试为一个区域修复这个问题,各种恼人的特殊情况都会从我尝试修复它的各个角度出现。
我尝试或考虑的一些事情:
所以我想知道,有什么显而易见的我在这里完全不见了吗?这是我根本不能用PathIterator做的事情,我需要实现自己的'多边形创建'算法吗?如果是的话,那里有什么东西吗?我几天来一直在嘲笑这件事。我似乎无法在互联网上找到任何帮助。
好吧,我只是想到了一些令人难以置信的明显的事情,我有点惭愧我试图做到这一点有多么复杂。我想我只是盯着这个问题。
这是一个令人难以置信的显而易见的简单机制,这意味着至少我现在已经保存了,但它显然非常低效,所以如果有人有更好的算法,它仍然非常受欢迎!