【问题标题】:Maze algorithm stack overflow迷宫算法堆栈溢出
【发布时间】: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


【解决方案1】:

代码看起来没问题。问题可能出在 Random.RandomRange 上。这可能有用:http://answers.unity3d.com/questions/549908/script-not-working-5.html

【讨论】:

    猜你喜欢
    • 2017-10-09
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 2015-05-31
    • 2011-06-19
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    相关资源
    最近更新 更多