오브젝트 설치🏠
10568 단어 C++게임 제작알고리즘게임DungeonGeneration
🌏 RPG의 세계에 오신 것을 환영합니다 🌏
이번에는 RPG의 필드 맵을 만들어 집을 짓습니다.
🌏 자동 생성 알고리즘 🌏
이번에 생성하는 RPG 필드 맵의 자동 생성 알고리즘은 "셀 오토마톤법" 를 사용합니다.
(>> 셀 오토마톤법에 대해 해설한 기사는 이쪽)
👾 사용할 타일👾
이번에 사용하는 타일은 7 종류입니다.
지형 상태 또는 도시 · 던전 정보를 저장합니다.
ID
이름
칼라
0.
바다
■■딥 블루■■
1.
평지
■■황록■■
2.
사막
■■박황■■
3.
숲
■■심록■■
4.
도시
■■적색■■
5.
동굴
■■ 하늘색 ■■
6.
마왕성
■■보라색■■
🏠 하우스 함수 만들기 🏠
template<typename After_Int_, typename Matrix_Int_, typename Matrix_>
bool setHouse(Matrix_& matrix_, const std::size_t n_, const After_Int_ set_value_, const Matrix_Int_ clear_value_) {
if (n_ == 0) return true;
/* ここに処理 */
return true;
}
이 RPG의 세계에 집(거리나 던전)을 세우는 함수를 만듭니다.
🌏 지형 타일 추출 🌏
ID
이름
칼라
0.
바다
■■딥 블루■■
1.
평지
■■황록■■
2.
사막
■■박황■■
3.
숲
■■심록■■
RPG 필드 맵에 있는 지형(위의 ID) 중 하나를 지정하여 도시를 만듭니다.
std::vector<std::pair<std::size_t, std::size_t>> value_pairs{};
for (std::size_t row{}; row < matrix_.size(); ++row)
for (std::size_t col{}; col < matrix_[row].size(); ++col)
if (matrix_[row][col] == clear_value_) value_pairs.emplace_back(std::make_pair(row, col));
if (value_pairs.size() == 0) return false;
지형을 추출합니다.
🏠하우스 설치🏠
std::size_t index{ static_cast<std::size_t>(dtl::random::mersenne_twister_32bit(static_cast<std::int_fast32_t>(value_pairs.size()))) };
for (std::size_t modify_count{}; modify_count < n_; ++modify_count) {
const auto& [modify_y, modify_x] {value_pairs[index]};
if (matrix_[modify_y][modify_x] != clear_value_) return false;
castCopyValue(matrix_[modify_y][modify_x], set_value_);
value_pairs.erase(std::remove(value_pairs.begin(), value_pairs.end(), value_pairs[index]), value_pairs.end());
if (value_pairs.size() == 0) break;
index = static_cast<std::size_t>(mersenne_twister_32bit(static_cast<std::int_fast32_t>(value_pairs.size())));
}
추출한 지형에 거리나 던전을 설치합니다.
🌏완성🌏
무사히 도시나 던전을 생성할 수 있었습니다!
구현 라이브러리(소스 코드)
이번 해설한 월드맵의 자동 생성은 "던전 템플릿 라이브러리" 에 "SetItem" 로서 구현되고 있습니다.
꼭 활용해보세요!
소스 코드 라이센스
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(오브젝트 설치🏠), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/2269dc8f01d6faf24cb3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번에 생성하는 RPG 필드 맵의 자동 생성 알고리즘은 "셀 오토마톤법" 를 사용합니다.
(>> 셀 오토마톤법에 대해 해설한 기사는 이쪽)
👾 사용할 타일👾
이번에 사용하는 타일은 7 종류입니다.
지형 상태 또는 도시 · 던전 정보를 저장합니다.
ID
이름
칼라
0.
바다
■■딥 블루■■
1.
평지
■■황록■■
2.
사막
■■박황■■
3.
숲
■■심록■■
4.
도시
■■적색■■
5.
동굴
■■ 하늘색 ■■
6.
마왕성
■■보라색■■
🏠 하우스 함수 만들기 🏠
template<typename After_Int_, typename Matrix_Int_, typename Matrix_>
bool setHouse(Matrix_& matrix_, const std::size_t n_, const After_Int_ set_value_, const Matrix_Int_ clear_value_) {
if (n_ == 0) return true;
/* ここに処理 */
return true;
}
이 RPG의 세계에 집(거리나 던전)을 세우는 함수를 만듭니다.
🌏 지형 타일 추출 🌏
ID
이름
칼라
0.
바다
■■딥 블루■■
1.
평지
■■황록■■
2.
사막
■■박황■■
3.
숲
■■심록■■
RPG 필드 맵에 있는 지형(위의 ID) 중 하나를 지정하여 도시를 만듭니다.
std::vector<std::pair<std::size_t, std::size_t>> value_pairs{};
for (std::size_t row{}; row < matrix_.size(); ++row)
for (std::size_t col{}; col < matrix_[row].size(); ++col)
if (matrix_[row][col] == clear_value_) value_pairs.emplace_back(std::make_pair(row, col));
if (value_pairs.size() == 0) return false;
지형을 추출합니다.
🏠하우스 설치🏠
std::size_t index{ static_cast<std::size_t>(dtl::random::mersenne_twister_32bit(static_cast<std::int_fast32_t>(value_pairs.size()))) };
for (std::size_t modify_count{}; modify_count < n_; ++modify_count) {
const auto& [modify_y, modify_x] {value_pairs[index]};
if (matrix_[modify_y][modify_x] != clear_value_) return false;
castCopyValue(matrix_[modify_y][modify_x], set_value_);
value_pairs.erase(std::remove(value_pairs.begin(), value_pairs.end(), value_pairs[index]), value_pairs.end());
if (value_pairs.size() == 0) break;
index = static_cast<std::size_t>(mersenne_twister_32bit(static_cast<std::int_fast32_t>(value_pairs.size())));
}
추출한 지형에 거리나 던전을 설치합니다.
🌏완성🌏
무사히 도시나 던전을 생성할 수 있었습니다!
구현 라이브러리(소스 코드)
이번 해설한 월드맵의 자동 생성은 "던전 템플릿 라이브러리" 에 "SetItem" 로서 구현되고 있습니다.
꼭 활용해보세요!
소스 코드 라이센스
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(오브젝트 설치🏠), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/2269dc8f01d6faf24cb3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번 해설한 월드맵의 자동 생성은 "던전 템플릿 라이브러리" 에 "SetItem" 로서 구현되고 있습니다.
꼭 활용해보세요!
소스 코드 라이센스
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(오브젝트 설치🏠), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/2269dc8f01d6faf24cb3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(오브젝트 설치🏠), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gis/items/2269dc8f01d6faf24cb3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)