오늘은 내 게임 만들기 1일차.
슬더슬 방식의 스테이지 선택 지도를 개발해보려고 해.
내가 오늘 목표로 삼은건 다음과 같은 지도야.
시작점에서부터 어떤 길을 선택하든 보스까지 이어져있고
모든 유저가 보스에 도달하기까지 만나는 스테이지 수가 똑같아야해
출처 : 슬더슬
일단 보이는 그대로 트리구조로 만들어봤어. 내가 지금부터 보여줄 트리는 아래쪽이 루트노드야
구현의 첫번째 아이디어는 다음과 같아.
1. 루트노드에서 시작해서 랜덤으로 1~3개의 자식노드를 생성.
2. 마지막에 보스 스테이지 노드를 붙여준다.
좋아 이쁘진 않지만 어느정도 작동한 것 같아.
하지만 해당 로직에는 문제가 있어.
트리의 레벨이 높아지면 감당하기 힘든 수준의 노드가 생성된다는거야.
물론 이대로 해도 게임 플레이 로직에는 문제가 없어.
하지만 언젠가 맵을 그려줄 아티스트를 생각해서 좀 더 이쁘게 만들어 보기로 했어.
두번째 아이디어는 생성되는 로직에서 레벨별로 노드 갯수를 제한하는거야.
자연스러움을 위해 다이아몬드 모양이 되도록 설정했어.
이번에는 모든 부모 노드가 왼쪽노드에 편향되어 있고, 심지어는 보스(설정한 트리레벨)까지가기 전에 재귀함수 탈출조건에 걸려서
중간에 리프노드가 생긴다는거야. 이렇게 만들면 보스도 못만나고 길을 잃어버리기 때문에 다시 생각해보기로 했어.
일단 재귀함수가 아니라 각 레벨별로 최대 노드를 미리 만들어보기로 했어
이제 각 레벨과 노드를 순회하면서 자식 레벨에 있는 노드 중 가까운 노드를 랜덤으로 연결해봤어.
이번에는 두가지 문제가 생겼어.
1. 노드가 줄어드는 레벨에서 지도의 선분이 서로 교차되는 문제.
2. 루트도느에서 절대로 도달할 수 없는 노드
인접한 노드를 선택하는 메소드를 약간 손보고,
루트노드에서 보스노드까지 탐색한뒤 마킹을 해서 도달할 수 없는 노드를 길에서 제외했어.
이제 좀 의도한 것 같은 지도가 나왔어.
다만 가끔 플레이어가 너무 선택할 만한게 없는 지도가 생성되기도 하는데 이건 어떻게 고쳐야할지 감이 안오네.
그냥 일부 노드를 먼저 지우고 가까운 상위 하위노드랑 연결하면 안됨?
중간 언저리 행 검사해서 쓰이는 노드 개수 n개 이하면 다시! 이런 방식은 어떰?
오! 나도 슬더스 같은 맵생성 로직이 필요해서 만들려고 하다가 일찌감치 포기하고 구글링해서 누가 깃허브에 올려준거 가져와서 수정해서 쓰는중인데... ㄷㄷ 꼭 완성하길 응원할께!
https://steamcommunity.com/sharedfiles/filedetails/?id=2830078257
이런것도
있음 여기서는 그리드를 이용해서 만드는듯