【发布时间】:2015-01-14 06:24:12
【问题描述】:
我正在尝试使用递归除法 (here) 为我的游戏创建一个简单的迷宫生成器,但我遇到了堆栈溢出异常。 (TBH,我真的很困惑......)这是代码(Boo Script):
def slice_v(x as int, y as int, w as int, h as int):
d = Random.RandomRange(x, w)
for i in range(y, h):
maze[i, d] = Wall.VWall
rem = Random.RandomRange(y, h)
maze[rem, d] = 0
Generate(x, y, d, h)
Generate(d, y, w-d, h)
def slice_h(x as int, y as int, w as int, h as int):
d = Random.RandomRange(y, w)
for i in range(x, w):
maze[d, i] = Wall.HWall
rem = Random.RandomRange(x, w)
maze[d, rem] = 0
Generate(x, y, w, d)
Generate(x, d, w, h-d)
def Generate(x as int, y as int, w as int, h as int):
if w < 2 or h < 2: return
if w > h:
slice_v(x, y, w, h)
elif w < h:
slice_h(x, y, w, h)
elif w == h:
i = Random.RandomRange(0, 1)
if i == 1:
slice_v(x, y, w, h)
else:
slice_h(x, y, w, h)
我真的不知道我做错了什么。好吧,提前谢谢...
【问题讨论】:
-
这是我第一次看到 boo 语言(谢谢 :))但是正如 wiki 页面所说的邻居之一,你确定你选择的是邻居之一吗?
-
不客气哈哈 :D 好吧,我使用的是递归除法。维基上是这样说的:“从没有墙壁的迷宫空间开始。称之为房间。用随机定位的墙壁(或多面墙壁)划分房间,其中每面墙壁都包含一个随机定位的通道开口。然后在子腔室上递归重复该过程,直到所有腔室都达到最小尺寸。“英语不是我的母语,所以我在理解时遇到了一些问题......
-
@dubix 你在 wiki 页面上看到了吗? “如上所述,该算法涉及深度递归,这可能会导致某些计算机架构出现堆栈溢出问题。”
标签: algorithm unity3d stack-overflow maze boo