我已经构建了一个由网格组成的游戏板,然后将网格随机分配给一个单元格“Walls”。一旦构建了单元格,我如何检查某个单元格是否“锁定”,以便我不会将玩家放在那里。
我已经考虑过这个问题了,第一次我提出检查四面墙的所有边,但显然,一个牢房可以被开放的牢房包围,然后被墙围住。
另一个是“逃到外面”算法,它基本上试图找到通往外墙的路径,这意味着它没有被锁定,但是如果该块位于外墙并且被块包围它将被锁定。
这通常如何处理?如果对任何代码示例都很重要,我正在使用python。
谢谢!
答案 0 :(得分:2)
你基本上想要一个填充算法 http://en.wikipedia.org/wiki/Floodfill
修改强>
我想我误解了你对'锁定'和'逃避'的定义
如果你的游戏板有限,那么每个单元都会锁定在某个空间内。如果我理解正确,你只需要那个空间足够大。那么,您可以使用泛洪填充算法轻松计算其面积。
答案 1 :(得分:1)
这实际上取决于游戏板的大小。如果我们谈论小板,a quick path finding algorithm可以给你每个小区和彼此之间的距离。如果您不希望将播放器放置得太靠近其他播放器或其他功能,则可能会有双重用途。
第二种选择是设计一种墙发生器,原则上不能创建锁定的房间。 The roguelike community已经a decent amount of research完成了生成随机(地牢大小)地图而没有封闭空间的主题。
最后,如果您必须在巨大的地图上找到适当大的空白空间,使用详细程度方法可以帮助您。查找分布在地图上的一组稀疏点的互连图(这可能是地图生成器的直接结果)。这应该足以放置一名球员。但是如果您需要更多关于特定点的细节,找到其中一个点的路径可以告诉您房间是否被锁定。这可能不适用于极其密集的迷宫。
答案 2 :(得分:1)
我不确定你的游戏板究竟是什么样子,但如果你有这样的东西:
+----------------------+
| +-----+ |
| | c | |
| | | |
| +-----+ |
| |
| |
| |
+----------------------+
你想避免将角色放在c
上,因为它被“围住”,即使它不是完全被围墙包围,你可以轻松地实现Left-or-Right Hand algorithm - 而不是试图走出迷宫,你正在检查你是否回到同一个坐标。
答案 3 :(得分:0)
也许this previous post正是您所寻找的。在那篇文章中,我回答了如何计算可以放置点的网格上的不同点的数量。你的问题很相似,除了没有“点”,你有墙。该帖子中给出的算法将为您提供网格G的版本,其中
G[x1][y1] == G[x2][y2]
只有当玩家可以从(x1,y1)到(x2,y2)时,即,如果从第一个点到第二个点有一条没有墙的畅通路径。
这是你在找什么?您是否需要其他详细信息,或者您是否希望我根据您的特定问题调整该代码?