개발일지

랜덤맵 제작 2

conmoto 2020. 4. 3. 00:18

지난번에 이어 랜덤맵 제작을 이어가겠다. 설계에 변경이 생겼는데, 그 점은 다음 두가지이다.

1. MAP클래스에 방의 왼쪽, 오른쪽, 위, 아래 끝의 좌표를 저장하는 내포클래스 ROOM 포함.

2. 방을 생성한 위치를 저장하는 set<pair<int, int>> m_RoomMap 변수를 map으로 변경.

방들의 위치를 저장해두는것이 맵을 제작하는데 있어 용이하게 사용되기 때문에 방을 만들고 map에 저장할때 방의 정보도 함께 저장하도록 하였다.

 

변경 후 MAP 클래스

다시한번 랜덤맵을 제작한 흐름을 보자면 다음과 같다.

1. 시작 방을 만들고 map에 저장

2. 시작방에서 출발해 보스방(출구)까지 가는 방을 만든다.

3. 시작방으로 돌아와 갈래길을 만든다.

랜덤맵 제작의 흐름

 

연속적으로 방을 만드는 MakeRoomChain함수는 만들 방의 갯수를 인자로 받고, 다음 방을 만들기전에 현재 방의 상하좌우로 방이 만들어지지 않은 위치를 랜덤으로 선택한다.

방이 만들어질 위치를 랜덤으로 선택

방향을 결정했다면, 다음 방으로의 통로를 만드는 CreatePath 함수를 호출한다. 이때 RoomMap에 저장된 현재 방의 정보를 함께 전달해 현재 방에서 어디에 통로의 입구를 만들지 알도록 해준다.

CreatePath 함수는 통로를 만든 후 다음 방으로의 통로 출구 위치를 반환한다.

통로의 출구 위치가 다음 방이 만들어질 위치이다. CreateRoom함수는 그 위치로부터 랜덤하게 방을 만들고

만들어진 방은 방의 위치와 함께 RoomMap에 저장한다.

MakeRoomChain 함수를 호출할때 받았던 방의 갯수를 연속적으로 만들기 위해, 현재 방의 위치 CurRoomPos의 값을 새로 만들어진 방의 위치로 바꿔준다.

 

실행결과

실행시마다 랜덤하게 5개의 방이 만들어 지는것을 확인했다.

다음으로는 맵에 타일이 더 많아지게 처리해주고, 방마다 몬스터를 스폰하는 작업을 해보겠다.