본문 바로가기

728x90

게임 개발/맵 제작

(3)
[게임개발/C#] 타일형 랜덤맵 배열 섞기. 피셔-예이츠 셔플. # 목표 예를 들어 10*10 크기의 타일형 랜덤맵을 만들 것입니다. 그 중 20개의 타일에 벽을 배치해야할 것입니다. 이 때 사용할 수 있는 방법으로 tile[0,0] ~ tile[9,9]까지 100개의 타일을 무작위로 섞어 20개를 뽑아 벽 타일로 정해줄 수 있습니다. 이렇게 배열 (유한 수열)이 있을 때 골고루 섞어주는 방법으로 피셔-예이츠 셔플(The Fisher-Yates Shuffle)을 사용하는 방법을 알아보겠습니다. # 피셔-예이츠 셔플 피셔-예이츠 셔플은 기존의 순열에서 무작위로 하나의 수를 뽑아 새로운 수열에 뽑은 순서대로 놓는 방식입니다. 이렇게 뽑은 랜덤 수열은 매 번 뽑을 때마다 어느 한 쪽으로 편향되지 않고 골고루 나온다는 장점이 있습니다. # 코드 예제 public static..
[게임개발] 타일형 랜덤맵에서 고립된 공간 만들지 않기. Flood Fill 활용. # 목표 타일형 랜덤 맵을 만들기 위해서 빈 타일을 미리 깔아놓고, 랜덤 한 좌표에 일정 갯수의 벽 타일을 생성하는 방법을 사용합니다. 이럴 때 아래의 오른쪽 그림과 같이 벽 타일로 둘러쌓여서 고립된 공간이 생기기 마련입니다. 이 고립된 공간이 생기지 않도록 하는 방법을 알아보겠습니다. # Flood Fill 알고리즘 플러드 필 알고리즘은 다차원 배열에서 연결된 영역(공간)을 찾는 알고리즘입니다. 그림판에서 사각형을 그려놓고 픽셀로 둘러쌓여진 곳 안에 연결된 부분에 모두 색칠하는 방법으로 사용하는 것이 대표적입니다. 모서리 방향을 연결된 것으로 볼 것이냐 아니냐에 따라 4방향 탐색, 8방향 탐색이 있습니다. 오른쪽 아래에 위치한 타일에서 시작했을 경우 녹색 타일은 연결되어 있는 영역입니다. 빨간색 타일은..
[게임개발/C#] 맵에디터 랜덤 맵 생성 관련 시드값 설정하기 마인크래프트나 문명같이 맵을 랜덤하게 생성해주는 게임에서 랜덤 맵을 생성할 때 시드값 (Seed) 이라는 것이 있어 시드값을 똑같이 입력하면 랜덤 맵일지라도 똑같게 만들어진 맵에서 플레이할 수 있습니다. 이 것을 구현하기 위한 Random 클래스 사용방법입니다. - 기본적인 랜덤 값 생성 방법입니다. Random rand = new Random(); int num = rand.Next(); Console.WriteLine(num); 출력 결과 1499166260 ( 0 이상 Int32.MaxValue 미만의 정수 값 ) 이렇게 실행하면 매 번 실행할 때마다 랜덤한 값을 얻을 수 있습니다. - 시드를 활용한 랜덤 값 생성 방법입니다. // 먼저 seed로 사용할 랜덤값을 구합니다. Random randSe..

728x90