PROG.

Maze Generator

NUL 2007. 3. 31. 23:38

미로 생성기

재귀 호출이나 스택을 이용합니다.

스택 사이즈를 늘리거나 맵의 크기를 제한 해야겠죠



아래는 제가 작성한 의사 코드로 교과서적인 알고리즘과는 다를수 있습니다. (책을 안봐서..;;)



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;