바이옴 생성 (셀 오토 마톤 법) 🌏
11203 단어 C++게임 제작알고리즘게임DungeonGeneration
🌏 바이옴 생성 🌏
이번에는 「바이옴 생성(셀 오토마톤법)」에 대해 이야기하겠습니다.
👾 사용할 타일👾
이번에 사용하는 타일은 4 종류입니다.
지형 상태를 저장합니다.
ID
이름
칼라
0.
바다
■■딥 블루■■
1.
평지
■■황록■■
2.
사막
■■박황■■
3.
숲
■■심록■■
🌊 바다 준비 🌊
지형 정보를 기록하는 2차원 배열std::array<std::array<dungeon_t, 64>, 32> matrix{{}};
바다의 ID는 0이므로 2차원 배열을 0으로 초기화합니다.
바다를 만들 수 있었습니다!
⛰ 육지를 뿌리다 ⛰
육지를 생성하는 함수를 만듭니다.
여기에서는 "createBiome"함수라고 명명합니다.
template<typename Matrix_>
void createBiome(Matrix_& matrix_);
외주 이외에 랜덤값(0~3)을 대입합니다.
createBiome 함수에 추가using dtl::random::mersenne_twister_32bit;
for (std::size_t row{ 1 }; row < matrix_.size() - 1; ++row)
for (std::size_t col{ 1 }; col < matrix_[row].size() - 1; ++col)
if (mersenne_twister_32bit.probability()) matrix_[row][col] = mersenne_twister_32bit(4);
조금 RPG의 월드 맵 같아졌습니다!
🌀지형을 변위시킨다🌀
4방향의 값과 중앙의 값을 비교해, 지형을 변위시켜 갑니다.
이 조작을 함으로써 RPG 같은 지형을 만들 수 있습니다.
createBiome 함수에 추가for (std::size_t i{}; i < 2; ++i)
for (std::size_t row{ 1 }; row < matrix_.size() - 1; ++row)
for (std::size_t col{ 1 }; col < matrix_[row].size() - 1; ++col) {
if (matrix_[row][col - 1] && matrix_[row][col + 1] && matrix_[row - 1][col] && matrix_[row + 1][col]) matrix_[row][col] = matrix_[row][col + 1];
else switch (mersenne_twister_32bit(4))
{
case 0:matrix_[row][col] = matrix_[row][col - 1]; break;
case 1:matrix_[row][col] = matrix_[row][col + 1]; break;
case 2:matrix_[row][col] = matrix_[row - 1][col]; break;
case 3:matrix_[row][col] = matrix_[row + 1][col]; break;
}
}
아까 정도의 "후카케 월드맵"을 변위시켜 갑니다.
아까보다 RPG의 월드 맵 같아졌습니다.
반복 변위시키면 서서히 월드맵처럼 보입니다.
좋은 느낌으로 깨끗한 월드맵이 생성된 단계에서 멈춥니다.
🌏완성🌏
깨끗한 월드맵이 완성되었습니다!
구현 라이브러리(소스 코드)
이번 해설한 월드맵의 자동 생성은 "던전 템플릿 라이브러리" 에 "Simple Biome Island" 로서 구현되고 있습니다.
꼭 활용해보세요!
소스 코드 라이센스
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(바이옴 생성 (셀 오토 마톤 법) 🌏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/e29f98a32ba9f920346d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
지형 정보를 기록하는 2차원 배열
std::array<std::array<dungeon_t, 64>, 32> matrix{{}};
바다의 ID는 0이므로 2차원 배열을 0으로 초기화합니다.
바다를 만들 수 있었습니다!
⛰ 육지를 뿌리다 ⛰
육지를 생성하는 함수를 만듭니다.
여기에서는 "createBiome"함수라고 명명합니다.
template<typename Matrix_>
void createBiome(Matrix_& matrix_);
외주 이외에 랜덤값(0~3)을 대입합니다.
createBiome 함수에 추가using dtl::random::mersenne_twister_32bit;
for (std::size_t row{ 1 }; row < matrix_.size() - 1; ++row)
for (std::size_t col{ 1 }; col < matrix_[row].size() - 1; ++col)
if (mersenne_twister_32bit.probability()) matrix_[row][col] = mersenne_twister_32bit(4);
조금 RPG의 월드 맵 같아졌습니다!
🌀지형을 변위시킨다🌀
4방향의 값과 중앙의 값을 비교해, 지형을 변위시켜 갑니다.
이 조작을 함으로써 RPG 같은 지형을 만들 수 있습니다.
createBiome 함수에 추가for (std::size_t i{}; i < 2; ++i)
for (std::size_t row{ 1 }; row < matrix_.size() - 1; ++row)
for (std::size_t col{ 1 }; col < matrix_[row].size() - 1; ++col) {
if (matrix_[row][col - 1] && matrix_[row][col + 1] && matrix_[row - 1][col] && matrix_[row + 1][col]) matrix_[row][col] = matrix_[row][col + 1];
else switch (mersenne_twister_32bit(4))
{
case 0:matrix_[row][col] = matrix_[row][col - 1]; break;
case 1:matrix_[row][col] = matrix_[row][col + 1]; break;
case 2:matrix_[row][col] = matrix_[row - 1][col]; break;
case 3:matrix_[row][col] = matrix_[row + 1][col]; break;
}
}
아까 정도의 "후카케 월드맵"을 변위시켜 갑니다.
아까보다 RPG의 월드 맵 같아졌습니다.
반복 변위시키면 서서히 월드맵처럼 보입니다.
좋은 느낌으로 깨끗한 월드맵이 생성된 단계에서 멈춥니다.
🌏완성🌏
깨끗한 월드맵이 완성되었습니다!
구현 라이브러리(소스 코드)
이번 해설한 월드맵의 자동 생성은 "던전 템플릿 라이브러리" 에 "Simple Biome Island" 로서 구현되고 있습니다.
꼭 활용해보세요!
소스 코드 라이센스
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(바이옴 생성 (셀 오토 마톤 법) 🌏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/e29f98a32ba9f920346d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
template<typename Matrix_>
void createBiome(Matrix_& matrix_);
using dtl::random::mersenne_twister_32bit;
for (std::size_t row{ 1 }; row < matrix_.size() - 1; ++row)
for (std::size_t col{ 1 }; col < matrix_[row].size() - 1; ++col)
if (mersenne_twister_32bit.probability()) matrix_[row][col] = mersenne_twister_32bit(4);
4방향의 값과 중앙의 값을 비교해, 지형을 변위시켜 갑니다.
이 조작을 함으로써 RPG 같은 지형을 만들 수 있습니다.
createBiome 함수에 추가
for (std::size_t i{}; i < 2; ++i)
for (std::size_t row{ 1 }; row < matrix_.size() - 1; ++row)
for (std::size_t col{ 1 }; col < matrix_[row].size() - 1; ++col) {
if (matrix_[row][col - 1] && matrix_[row][col + 1] && matrix_[row - 1][col] && matrix_[row + 1][col]) matrix_[row][col] = matrix_[row][col + 1];
else switch (mersenne_twister_32bit(4))
{
case 0:matrix_[row][col] = matrix_[row][col - 1]; break;
case 1:matrix_[row][col] = matrix_[row][col + 1]; break;
case 2:matrix_[row][col] = matrix_[row - 1][col]; break;
case 3:matrix_[row][col] = matrix_[row + 1][col]; break;
}
}
아까 정도의 "후카케 월드맵"을 변위시켜 갑니다.
아까보다 RPG의 월드 맵 같아졌습니다.
반복 변위시키면 서서히 월드맵처럼 보입니다.
좋은 느낌으로 깨끗한 월드맵이 생성된 단계에서 멈춥니다.
🌏완성🌏
깨끗한 월드맵이 완성되었습니다!
구현 라이브러리(소스 코드)
이번 해설한 월드맵의 자동 생성은 "던전 템플릿 라이브러리" 에 "Simple Biome Island" 로서 구현되고 있습니다.
꼭 활용해보세요!
소스 코드 라이센스
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(바이옴 생성 (셀 오토 마톤 법) 🌏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/e29f98a32ba9f920346d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번 해설한 월드맵의 자동 생성은 "던전 템플릿 라이브러리" 에 "Simple Biome Island" 로서 구현되고 있습니다.
꼭 활용해보세요!
소스 코드 라이센스
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(바이옴 생성 (셀 오토 마톤 법) 🌏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/e29f98a32ba9f920346d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(바이옴 생성 (셀 오토 마톤 법) 🌏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gis/items/e29f98a32ba9f920346d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)