2015-01-05 185 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

回答