RPGVX Ace 스크립트
2014.10.11 00:50

Random Dungeon Generator - Random Room

조회 수 928 추천 수 0 댓글 7
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

 랜덤 던전 생성기에서 랜덤 동굴 생성기 다음으로 만든 랜덤 방 생성기입니다.

 정리해서 짠게 아니라서 미흡한점 양해 부탁드립니다.


 랜덤 방 생성기를 제작하는데 참조한 사이트는 다음과 같습니다.

 랜덤 방 선택 동영상

 랜덤 던전 생성기 이론


 우선 순위 큐를 제작하기 싫어서 ruby에서 우선 순위 큐를 작성한 것을 이용했습니다.

 사이트는 다음과 같습니다.

 루비-배열로 구현된 우선순위 큐-


 원리는 '랜덤 던전 생성기 이론'에 있는 사이트를 보시면 되는데,

 해석하면 다음과 같습니다.


 1. 임의의 방을 무작위로 생성 시킨다.

 2. 임의의 방에서 무작위로 방을 1개 고른다.

 3. 고른 방의 주위의 방(겹쳐진방)이 있으면 그 방을 지우고 2번의 반복한다.

 4. 겹쳐진 방이 다 끝나면, 연결 되지 않은 방에 방을 1개 고르고, A*알고리즘(저는 BFS[Beast First Search]를 사용했습니다.)을 사용하여 방을 연결시킨다.

 5. 연결이 다되면, 연결된 방에 문과, 기타 이벤트들을 넣는다.(이건 구현 하지 않았습니다.)


 여기서, 무작위로 생성시킨 다음, 2-3의 반복을 이해가 안되는 분은, '랜덤 방 선택 동영상'을 보시면 이해가 빠르실겁니다.(동영상에서 연결된 사이트도 랜덤 방 생성기를 구현한 사이트입니다.)


 이제, 4을 구현 해야되는데. 여기서 제가 착각한 부분이기도 한 것인데, 경로를 찾기 위해선 2차 배열을 저장하는 배열을 가지고 있어야 됩니다.

 예) [[2,3],[2,4],[3,4]]


 그렇지 않으면, 어디에 최적화된 경로인지 알 수 없기 때문에, 반드시 배열 안에 배열을 해야되며, 우선 순위 검색은 깊이 우선 검색(DFS)보다 나은 점이, 끝까지 가는게 아니라, 최적의 경로(거리가 짧은 경로)를 우선시 하기 때문에, 빠른 경우가 많습니다.(그렇다고 무조건 빠른건 아닙니다.)


 적용 방법은

 Ran_Room.filesetMap(5,rand(100)+17, rand(100)+13)

 Ran_Room.filesetMap(10, 1000, 1000, 20, 50, 10, 30)


 


 Ran_Room.filesetMap(맵의 갯수, 맵의 넓이, 맵의 높이, 방의 최소 넓이, 방의 최대 넓이, 방의 최소 높이, 방의 최대 높이)


 로 구성 되어있고, 각 파일맵에 맞추시고 싶으시면,

 먼저 맵을 로드하신 후


 map = $data_load("Data/MapXXX.rvdata2"

  Ran_Room.createMaps(map, counts, min_x, max_x, min_y, max_y)



  Ran_Room.createMaps(맵의 변수, 생성 시킬 방의 갯수(임의의 위치의 방의 갯수 많을 수록 다양한 방이 만들어 질 가능성이 증가합니다.[그 만큼 느려집니다.], 방의 최소 넓이, 방의 최대 넓이, 방의 최소 높이, 방의 최대 높이)


 이렇게 개별로 적용 시킬 수 있습니다.


맵을 적용시켰을 경우.

map.jpg

?
  • ?
    임춘해 2014.11.21 00:56
    아놔진짜안돼요
  • ?
    JunkMan 2014.11.21 18:28
    그냥 적용 시켰는데 안되는것인가요?
    어떻게 하셨는지 알려주셔야지 제대로 답변이 가능합니다;
    그리고, 제가 테스트 해본 결과 Data불러오는 DataManager쪽에 적용시켜야지 제대로 작동이 가능합니다.(아니면, 맵에 들어가기 전에 어떻게든 적용 시켜주셔야됩니다.)
    플레이어가 맵에 들어간 다음에 적용 시켜봤자 소용없습니다.
    맵 파일을 제작해주는 소스로 짜져있기 때문에, 실시간으로 맵을 변형시키는 소스는 다른 쪽에 변형을 시켜야되므로 그점 양해 바랍니다.
    만약 게임 실행했는데 검은색 바탕으로만 나온다면, 그것은 맵을 제작하고 있는 중이라서 그렇게 보이는 겁니다.
    맵 제작에 오래 걸리는 경우는 다음과 같습니다.

    맵이 큰데, 방의 크기가 너무 작아서 방의 갯수가 많은 경우.
    맵이 큰데, 방의 크기가 크지만, 방의 경로가 외곽쪽에 몰려있는 경우,
    맵이 작은데 방의 크기가 커서 방의 경로가 외곽쪽에 몰려 있는 경우.
    맵이 작은데, 방의 크기가 커서 경로를 찾지 못하는 경우.(이 경우는 최악의 경우로 절대로 맵이 완성 될 수가 없습니다;)

    등이 있습니다.

    제가 만든 스크립트는 방과 방사이의 최단거리 우선 순위 탐색으로 한것입니다.
    이것으로 작동했을때, 외곽쪽으로 몰려 있는 경우,최악의 경우로 오래걸릴 수 밖에 없습니다;
  • ?
    두부 2014.12.06 02:35
    아래의 댓글들 모두 삭제해 주세요.
  • ?
    임춘해 2014.11.21 00:57
    아놔진짜안돼요
  • ?
    임춘해 2014.12.06 02:16
    첨부가 어디있어요
  • ?
    JunkMan 2014.12.06 02:52
    file이라는 이미지 옆에 첨부(2)을 눌러 보시면
    Random Room.txt라는게 있는데, 이걸 사용해주시면 되겠습니다.
  • ?
    임춘해 2014.12.06 02:17
    첨부가 어디있어요

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수 추천 수
4 유니티 스크립트 화면에 이미지를 표시하는 스크립트(C#) 1 zerosium 2016.02.04 2369 0
3 유니티 스크립트 유니티)캐릭터 좌우 이동 (C#) 4 zerosium 2016.01.05 977 0
2 유니티 스크립트 [C#] 보안 64비트 정수 맛난호빵 2016.01.04 382 0
1 유니티 스크립트 구간 루프 음악 스크립트 맛난호빵 2015.08.24 230 0
Board Pagination Prev 1 Next
/ 1






[개인정보취급방침] | [이용약관] | [제휴문의] | [후원창구] | [인디사이드연혁]

Copyright © 1999 - 2016 INdiSide.com/(주)씨엘쓰리디 All Rights Reserved.
인디사이드 운영자 : 천무(이지선) | kernys(김원배) | 사신지(김병국)