본문 바로가기
레인보우 연구일지

랜덤 맵 절차적 생성 개발에 대한 연구일지 part.1

by RainbowStudio 2023. 8. 28.
반응형

랜덤 맵은 매우 매력적인 게임 요소지요. 특히 로그라이크(트)류 게임에서 많이 쓰이는 것 같습니다.

전세계 개발자분들이 다양한 방식으로 랜덤맵을 개발하시는것같은데 레인보우스튜디오도 나름대로 랜덤맵을 한번 고민해봤습니다.

 

일단 구현해본 절차적으로 생성된 랜덤맵 영상입니다.

세로 흰줄은 빈공간이고 점4개 찍힌 네모는 길, 해골이나 돈,특정표시마크는 특정 목적(초록색마크가 출발지점)을 가진 방을 의미합니다.

 

맵생성에는 다양한 알고리즘이 쓰이는 것 같지만 그냥 머릿속으로 구상을 해서 구현했기에(두뇌풀가동!) 어떤 문제가 일어날지 저도 모릅니다(응?)

 

개발 순서대로 설명을 작성해보겠습니다.


개발 순서

 

1. 그리드(Grid)를 이용해서 개발했지만 배열도 크게 상관은 없을 것 같습니다. 원하는 크기의 배열을 생성 후 배열의 모든 자리에 빈공간 값을 넣어줍니다 (-1을 넣어주고 특수한 목적이나 길같은 부분은 1,2,3,4와 같이 각기 다른 번호를 넣어서 구분해줄예정입니다.)

 

2. 빈공간 값으로 구성된 배열에 특수한 목적지점들(출발지,돈,보스등)을 서로 겹치지 않게 랜덤으로 위치시켜줍니다. 여기까지 진행한 후 배열 내용을 그려봅니다. 빈공간에 맞는 스프라이트와 각 지점에 맞는 스프라이트를 적용해서 봅니다.

 

위 이미지 처럼 랜덤으로 각 지점들이 표시되면 성공입니다.

 

3. 여기서부터 머리가 아파오기 시작하는데요. 출발지점(초록마크)에서 각 목표지점을 연결해주는 길을 순서대로 만들어줘야합니다.

 

1) 출발지점을 기준으로 좌우상하 라인을 탐색하면서 한칸씩 주변을 탐색해준다. 예시로 좌측라인을 탐색할때 위아래 한칸씩 추가로 탐색한다. 탐색중 양쪽을 탐색하기전에 빈공간이 아닌 지점을 발견하면 바로 길을 생성해준다.

 

이제 무슨말인지 헷갈리기 시작합니다. 허허허.. 아래 이미지를 보면 이해가 좀 더 쉽습니다.

출발지점을 기준으로 위쪽에서 탐색할때 노란색지점을 바로 발견했기 때문에 바로 하단에 길을 생성해주고, 돈표시가 바로 옆에 있기 때문에 길을 만들어주고, 하단 해골마크도 바로 발견했기 때문에 바로 위에 길생성, 우측탐색시 바로 아래칸에 붉은마크가 있기에 길생성을 해줬습니다.

 

2) 길이 생성된 지점에서 출발지점까지 좌우상하를 탐색해서 일직선으로 길을 생성해준다.

일단 이미지를 보면서 이해하시는게 빠를것같습니다 

출발지점에서 좌측방향 탐색중 해골발견 길생성 후 출발지점까지 일직선으로 길생성, 하단방향 탐색중 노란색마크 발견 길생성 후 출발지점까지 일직선으로 길생성 (이미지에서 보이는 붉은색마크와 돈마크는 현재까지 구현된 내용으로는 길연결이 안되는게 맞습니다.)

 

출발지점에서 상단해골 발견후 출발지점까지 일직선 길생성, 출발지점에서 우측으로 돈마크와 노란마크 발견 길생성후 출발지점까지 일직선 길생성, 출발지점에서 하단으로 탐색중 붉은 마크 발견 길생성 후 출발지점까지 일직선으로 길생성 

 

3) 위 이미지에서 본 것 처럼 대충 대각선쪽 방향이면서 멀리위치한 마크를 어떻게 연결하면 될까요? 이건 다음 시간에 계속...하면 안될 것 같으니 계속 진행하죠 대각선으로 탐색하는건 너무 헷갈리고 전체 맵 사이즈가 짝수나 홀수일때 대각선 탐색은 거시기한 결과를 맞이할수있습니다.

좀 더 쉽게 다시 좌우상하로 탐색하겠습니다(응?) 

 

대신 이번에는 좌우상하 탐색이지만 좌측탐색이면 지점마다 상하끝까지 탐색하는 식으로 찾아보겠습니다.

좌측탐색은 상하끝까지 탐색 우측탐색은 상하, 상단탐색은 좌우, 하단탐색은 좌우로~

이게 무슨말인지 이미지를 보고 체크해보겠습니다.

 

위이미지에서 대충 대각방향에 있어서 연결이 안되는 지점은 붉은색이고 출발지점에서 좌측탐색시 위아래방향으로 전체를 체크해서 붉은색 마크 발견후 붉은색마크 하단으로 길생성, 출발지점에서 상단에서 좌측으로 탐색중 붉은색 마크 발견 후 그대로 길생성

 

이미지에서 연결안되는 지점은 노란색마크고 우측탐색중 하단탐색시 노란색마크발견후 길생성, 하단탐색중 우측탐색으로 노란색마크발견후 길생성

 

길생성은 출발지점 위치 좌표값을 기준으로 그대로 출발지점까지 생성해주면 됩니다.

 

요렇게 출발지점과 떨어진 곳에 마크들이 있어도 차근차근 탐색해주면 길을 전부 이어줄 수 있습니다~!

이미지들이 서로 다른 위치, 다른 사이즈인것은 랜덤크기로 생성되게 구현되어서 그렇습니다. 아마 연습해보실분은 먼저 고정된 크기로 구현해보시고 문제가 없으면 동적으로 생성되게 구현해보시면 큰 문제는 없을 것 같습니다.

 

현재는 랜덤에만 의존해서 랜덤맵의 형태를 구현했는데 향후에 이렇게 구현된 랜덤맵을 좀 더 디테일하게 컨트롤 할 수 있는 부분에 대해서 작성해보려고 합니다 ㅎ 

 

 

 

도움이 되셨다면 스튜디오 게임들도 구경하고 찜하기, 팔로우도 해주시면 감사합니다~!

 

Steam 배급사: RainbowStudio (steampowered.com)

 

Steam Publisher: RainbowStudio

It is a Rainbow Studio that makes games with various colors like a rainbow. Thank you.

store.steampowered.com

 

반응형

댓글