我正在使用Codigniter和JQuery编写类似风险的游戏。我想出了一种方法来创建随机生成的地图,通过制作完整的瓷砖布局然后删除随机的。然而,这有时会产生我称之为岛屿的东西。
在风险中,你只能攻击一个空格。因此,如果一个玩家碰巧拥有一个自己的岛屿,他们就永远无法放松。
我正试图找到一种方法,我可以在游戏开始前查看地图是否有岛屿。
我已经提出了一个函数来找出每个空间有多少个相邻空格,但我不知道如何实现它以便找到岛屿。
每个丢失的地点也被识别为“水”。
我不允许使用图片代码: http://imgur.com/xwWzC.gif
答案 0 :(得分:8)
这个问题有一个标准名称,但我的头脑中可能会有以下情况:
当你完成时(即当所有邻居都被着色时),循环遍历所有图块的列表以查看是否有任何静止/未着色(如果是,它们是岛屿)。
答案 1 :(得分:3)
你如何进行随机生成?可能最好的方法是在此时解决它。当您生成地图时,如果您注意到刚刚创建的地图是不可能的,您可以通过添加适当的元素来解决它。
虽然我们需要知道你是如何做这一代的。
答案 2 :(得分:1)
这是你从随机磁贴开始的基本深度优先遍历,用python式语言伪编码:
visited = set()
queue = Queue()
r = random tile
queue.add(r)
while not queue.empty():
current = queue.pop()
visited.add(current)
for neighbor in current.neighbors():
if neighbor not in visited:
queue.add(neighbor)
if visited == set(all tiles):
print "No islands"
else:
print "Island starting at ", r
答案 3 :(得分:1)
这有望提供另一种解决方案。而不是“孤岛”我使用的术语是“断开连接的组件”,因为它只关系所有其他所有区块是否都可以到达(如果有断开的组件,那么如果他自己的区域都在一个组件中,则玩家无法通过征服获胜)
这应该(我认为)及时运行O(n),其中n是地砖的数量。
答案 4 :(得分:0)
在数据集上运行模糊内核。
将十六进制网格视为图像(它是一种)
value(x,y)=此(x,y)周围所有图块的平均值
这会轻微侵蚀海滩,消灭岛屿。学生可以在结果数据集上运行边缘检测内核,以填充海滩图块。