2015-01-05 124 views
1

我想为我的游戏创建一个简单的迷宫生成器,使用递归除法方法(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) 

我真的不知道我做错了什么。那么,在此先感谢...

+0

这是我第一次看到boo语言(谢谢:))但是由于wiki页面说的是其中一个邻居,你确定你选择了其中一个邻居吗? – Lrrr

+0

哦,不客气哈哈:D 嗯,我使用递归除法方法。这就是它在维基上所说的: “从没有墙壁的迷宫的空间开始,把这个房间称为房间,用一个随机放置的墙壁(或多个墙壁)分隔房间,每个墙壁中都有一个随机定位的通道开口然后在子房间递归地重复这个过程,直到所有房间都是最小尺寸。“ 英语不是我的母语,所以我有一些问题在低估... – dcubix

+0

@dubix你在维基页面上看到过吗? “如上所述,该算法涉及深度递归,这可能会导致某些计算机体系结构上的堆栈溢出问题。” – Lrrr

回答