[英]Algorithm Help: Building game board, but need to know when square is locked in
我建立了一个由网格组成的游戏板,然后将网格随机分配给“ Walls”到一个单元。 构建好单元后,如何检查某个单元是否已“锁定”,这样我就不会再放置播放器了。
我已经考虑过这一点,在第一年前,我想出了四面都检查墙壁的方法,但是很明显,一个牢房可以被敞开的牢房包围,然后再被墙壁包围。
另一个是“逃逸到外部”算法,它基本上试图找到通往外墙的路径,这意味着它没有被锁定,但是如果该块位于外墙上并且被块包围,则它将被锁定。在。
通常如何处理? 如果任何代码示例都重要,我将使用python。
谢谢!
您基本上需要一个泛洪算法。
http://en.wikipedia.org/wiki/Floodfill
编辑
我想我误解了您对“锁定”和“逃逸”的定义。
如果您的游戏板有限,则每个单元格都锁定在某个空间中。 如果我对您的理解正确,那么您只是希望该空间足够大。 好了,您可以使用洪水填充算法轻松计算其面积。
这实际上取决于游戏板的大小。 如果我们说的是小型电路板,则快速路径查找算法可以为您提供每个单元之间的距离。 如果您不想将播放器放置在与其他播放器或其他功能过于靠近的位置,则可能有双重用途。
第二种选择是设计一种原则上不能创建锁定房间的墙式发生器。 流氓类社区对生成不带封闭房间的随机(地牢大小)地图的主题进行了大量研究 。
最后,如果您必须在巨大的地图上找到适当的大空白空间,则使用详细程度的方法可以为您提供帮助。 查找分布在地图上的一组稀疏点的互连图(这可能是地图生成器的直接结果)。 这足以放置一个玩家。 但是,如果您需要有关特定点的更多详细信息,则找到通往这些点之一的路径可以告诉您房间是否被锁定。在迷宫般的密集迷宫中,这可能不起作用。
我不确定您的游戏板到底是什么样子,但是如果您有这样的事情:
+----------------------+
| +-----+ |
| | c | |
| | | |
| +-----+ |
| |
| |
| |
+----------------------+
而且,您希望避免将字符放到c
上,因为它已“围入”,即使它没有被墙壁完全包围,您也可以轻松实现左右手算法 -只是尝试摆脱这种情况您正在检查的迷宫,以查看是否使其回到相同的坐标。
也许以前的帖子就是您想要的。 在那篇文章中,我回答了如何计算可以放置点的网格上点的不同区域的数量。 您的问题是相似的,除了有“点”而不是墙。 该帖子中给出的算法将为您提供网格G的版本,其中
G[x1][y1] == G[x2][y2]
仅当玩家有可能从(x1,y1)到达(x2,y2)时,即,从第一个点到第二个点之间没有障碍物的畅通无阻的路径。
这是你想要的? 您是否需要其他详细信息,还是要我根据您的特定问题修改代码?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.