Maze Generator
미로 생성기
재귀 호출이나 스택을 이용합니다.
스택 사이즈를 늘리거나 맵의 크기를 제한 해야겠죠
아래는 제가 작성한 의사 코드로 교과서적인 알고리즘과는 다를수 있습니다. (책을 안봐서..;;)
function CanMaze(현위치, 이동방향): Boolean
begin
Result := 현위치에서 이동방향으로 이동시 맵의 범위 안에 있다 and
이동 후 현위치를 제외한 사방이 벽으로 막혀 있다
end;
procedure SubGeneMaze(현위치, 이동방향);
begin
현위치의 벽을 허문다;
// 일정확률로 이동 방향에 가중치를 줌에 따라 미로의 전반적 형태가 달라진다
if 일정확률 then 다음방향 := 이동방향
else 다음방향 := 랜덤방향;
if CanMaze(현위치, 다음방향) then
SubGeneMaze(현위치에서 다음방향으로 이동한 위치, 다음방향);
if 다음방향이 상 또는 하 then
begin
// 좌,우 우선순위는 랜덤으로 결정
if CanMaze(현위치, 좌(우)) then SubGeneMaze(현위치, 좌(우));
if CanMaze(현위치, 우(좌)) then SubGeneMaze(현위치, 우(좌));
end;
if 다음방향이 좌 또는 우 then
begin
// 상,하 우선순위는 랜덤으로 결정
if CanMaze(현위치, 상(하)) then SubGeneMaze(현위치, 상(하));
if CanMaze(현위치, 하(상)) then SubGeneMaze(현위치, 하(상));
end;
end;
procedure GenerateMaze(시작지점);
begin
모든맵을 벽으로 채운다;
SubGeneMaze(시작지점, 랜덤방향);
end;