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, 난 정말 ... 혼동하고 있습니다). 음, 미리 감사드립니다 ...
내가 처음으로 부 언어를 보았습니다. (감사합니다. :))하지만 위키 페이지에 이웃 중 하나가 나와 있기 때문에 이웃 중 하나를 선택 하시겠습니까? – Lrrr
오, 하하 하하하 : D 글쎄, 나는 재귀 적 분할 방법을 사용하고있다. 위키에서 말하는 내용입니다 : "벽이없는 미로의 공간부터 시작하여이 챔버를 무작위로 배치 된 벽 (또는 여러 개의 벽)으로 나누십시오. 각 벽에는 무작위로 배치 된 통로가 들어 있습니다 그런 다음 모든 챔버가 최소 크기가 될 때까지 서브 챔버에서 반복적으로 프로세스를 반복하십시오. " 영어가 모국어가 아니므로 언더우드에 문제가있는 것 같습니다. – dcubix
@dubix 위키 페이지에서 이것을 보았습니까? "위에서 주어진 것처럼이 알고리즘은 일부 컴퓨터 아키텍처에서 스택 오버 플로우 문제를 일으킬 수있는 심층 재귀를 필요로합니다." – Lrrr