2015-01-05 6 views
1

나는 재귀 적 분할 방법 (here)을 사용하여 게임을위한 간단한 미로 생성기를 만들려고하지만 스택 오버플로 예외가 발생합니다.미로 알고리즘 스택 오버플로

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) 

난 정말 내가 잘못하고있는 중이 야 모르겠어요 : 여기에 코드 (우우 스크립트)의 (TBH, 난 정말 ... 혼동하고 있습니다). 음, 미리 감사드립니다 ...

+0

내가 처음으로 부 언어를 보았습니다. (감사합니다. :))하지만 위키 페이지에 이웃 중 하나가 나와 있기 때문에 이웃 중 하나를 선택 하시겠습니까? – Lrrr

+0

오, 하하 하하하 : D 글쎄, 나는 재귀 적 분할 방법을 사용하고있다. 위키에서 말하는 내용입니다 : "벽이없는 미로의 공간부터 시작하여이 챔버를 무작위로 배치 된 벽 (또는 여러 개의 벽)으로 나누십시오. 각 벽에는 무작위로 배치 된 통로가 들어 있습니다 그런 다음 모든 챔버가 최소 크기가 될 때까지 서브 챔버에서 반복적으로 프로세스를 반복하십시오. " 영어가 모국어가 아니므로 언더우드에 문제가있는 것 같습니다. – dcubix

+0

@dubix 위키 페이지에서 이것을 보았습니까? "위에서 주어진 것처럼이 알고리즘은 일부 컴퓨터 아키텍처에서 스택 오버 플로우 문제를 일으킬 수있는 심층 재귀를 필요로합니다." – Lrrr

답변