我已阅读this问题,并对我的问题做了研究,但是我发现我还没有合适的答案。多算法迷宫构建器的具体数据结构
我想建立一个通用的数据结构在红宝石与我可以实现任何(2D,矩形)我认为合适的迷宫生成算法。首先,我将执行Randomized Prim's和Depth-First Search,稍后我将要实施Sidewinder等。目标是能够生成各种不同的迷宫。而且,仅供参考,墙不是一个“填充”单元格 - 它是两个相邻单元格之间的分隔线,可以是固定的也可以不是。
但我面临的问题是所有的算法都需要了解不同的事情。举例来说,Prim就选择了Cell
并将其Walls
添加到wall_list
。没关系,我可以从这开始:
class Cell
def get_surrounding_walls
# some code
end
end
class Wall
@solid = true
def remove
@solid = false
end
end
wall_list = []
但是现在我开始遇到关于如何存储特定细节的混淆。我应该有一个多维数组的单元格?细胞跟踪他们自己的四面墙吗?如果我这样做了,那么当我切换墙时,我必须增加复杂性,因为我需要获取相邻单元格的墙。如果我得到一个单元格来跟踪它的右侧和下侧墙,那么我会增加获取UP和左侧墙的状态的复杂性。
另一方面,如果单元格和墙壁保持在单独的列表中,我是否应该为所有的墙壁设置一个阵列,还是为上/下墙壁和左/右墙壁设置一个阵列?在第一种情况下,选择一个随机墙更容易,并且查询特定墙的状态,但实际结构更难 - 墙与网格很不一致。而且它让单元难以了解围绕它的墙。
我应该跟踪细胞吗?常识说他们需要成为对象,因为后面的一些算法会要求细胞知道设置了哪些对象。但是如果我想使用某种Graph,比如Adjacency Matrix,那么整个结构似乎只设置为跟踪墙。而且,对于大型迷宫来说,矩阵变得非常大。
这可能是一个分析麻痹的情况,但事实仍然是,我不知道开始。
引用伟大的弗雷德布鲁克斯:“计划扔掉一个;你会,无论如何。” – 2014-10-08 14:51:37
哦,我已经写了并重写了大约100行代码,现在只删除了大约3到4次。没有什么似乎包括我需要它的一切:( – 2014-10-08 14:54:02