지형 생성 (셀 오토 마톤 법) 🌏
16411 단어 C++게임 제작알고리즘게임DungeonGeneration
🌏 어머니가 되는 대지를 창조한다🌏
이번에는 세계를 창조하는 금단의 어둠 마술에 대해 해설합니다.
🌏셀 오토마톤법으로 작성🌏
셀 오토마톤법으로 작성하는 지형 생성의 동작
세계 생성 알고리즘에는 여러 종류가 있습니다.
그 중에서도 이번에는 간단한 코드로 생성하는 데 뛰어난 "셀 오토마톤법"을 사용합니다.
기타 대표 알고리즘: "보로노이 도법의 세계 자동 생성" · "청크 중점 변위법의 세계 자동 생성"
🌏셀 오토마톤 아일랜드 생성 클래스🌏
셀 오토마톤법으로 섬 생성을 한다 SimpleCellularAutomatonIsland
클래스를 작성합니다.
클래스 이름namespace dtl {
template<typename Int>
class SimpleCellularAutomatonIsland;
}
dtl (Dungeon Template Library) 이름 공간에 작성합니다.
일단 도입할 준비가 되었습니다.
다음은 육지 생성 부분을 만듭니다.
🌏 육지 모양 만들기 🌏
셀 오토마톤 섬 생성 (public)template<typename Matrix_>
constexpr void create(Matrix_& matrix_, const std::size_t max_value_ = 2) const noexcept {
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] = 1;
}
"create関数"
는 육지 생성하는 함수입니다.
화면의 후지 이외의 장소에 무작위로 육지를 설치합니다.
🌏 지각 변동🌏
지각 변동template<typename Matrix_>
constexpr void create(Matrix_& matrix_, const std::size_t max_value_ = 2) const noexcept {
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] = 1;
for (std::size_t i{}; i < max_value_; ++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;
}
}
}
지각 변동을 일으켜 육지를 이동시킵니다.
🌏 지각 변동을 반복합니다 🌏
단지 오로지 지각 변동을 일으킵니다.
좋은 것 같은 지형이 되었을 때 멈춥니다.
지각 변동의 마지막은 모두가 바다의 바닥에 가라앉습니다.
🌏CUI로 출력🌏
cui#include <array>
#include "DTL.hpp"
int main() {
using dungeon_t = bool;
std::array<std::array<dungeon_t, 128>, 128> matrix{ {} };
dtl::generator::terrain::stl::SimpleCellularAutomatonIsland<dungeon_t> a(matrix,200);
dtl::console::output::stl::stringBool(matrix, "##", "//");
return 0;
}
콘솔에서 출력할 수 있었습니다!
🌏완성🌏
무사히 구현할 수 있었습니다.
🌏 구현 라이브러리 (소스 코드) 🌏
이번 해설한 동굴의 자동 생성은 "던전 템플릿 라이브러리" 에 "Simple Cellular Automaton Island" 로 구현되어 있습니다.
꼭 활용해보세요!
🌏 소스 코드 라이센스 🌏
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(지형 생성 (셀 오토 마톤 법) 🌏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/d460aba1384634f0b6dc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
셀 오토마톤법으로 작성하는 지형 생성의 동작
세계 생성 알고리즘에는 여러 종류가 있습니다.
그 중에서도 이번에는 간단한 코드로 생성하는 데 뛰어난 "셀 오토마톤법"을 사용합니다.
기타 대표 알고리즘: "보로노이 도법의 세계 자동 생성" · "청크 중점 변위법의 세계 자동 생성"
🌏셀 오토마톤 아일랜드 생성 클래스🌏
셀 오토마톤법으로 섬 생성을 한다 SimpleCellularAutomatonIsland
클래스를 작성합니다.
클래스 이름namespace dtl {
template<typename Int>
class SimpleCellularAutomatonIsland;
}
dtl (Dungeon Template Library) 이름 공간에 작성합니다.
일단 도입할 준비가 되었습니다.
다음은 육지 생성 부분을 만듭니다.
🌏 육지 모양 만들기 🌏
셀 오토마톤 섬 생성 (public)template<typename Matrix_>
constexpr void create(Matrix_& matrix_, const std::size_t max_value_ = 2) const noexcept {
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] = 1;
}
"create関数"
는 육지 생성하는 함수입니다.
화면의 후지 이외의 장소에 무작위로 육지를 설치합니다.
🌏 지각 변동🌏
지각 변동template<typename Matrix_>
constexpr void create(Matrix_& matrix_, const std::size_t max_value_ = 2) const noexcept {
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] = 1;
for (std::size_t i{}; i < max_value_; ++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;
}
}
}
지각 변동을 일으켜 육지를 이동시킵니다.
🌏 지각 변동을 반복합니다 🌏
단지 오로지 지각 변동을 일으킵니다.
좋은 것 같은 지형이 되었을 때 멈춥니다.
지각 변동의 마지막은 모두가 바다의 바닥에 가라앉습니다.
🌏CUI로 출력🌏
cui#include <array>
#include "DTL.hpp"
int main() {
using dungeon_t = bool;
std::array<std::array<dungeon_t, 128>, 128> matrix{ {} };
dtl::generator::terrain::stl::SimpleCellularAutomatonIsland<dungeon_t> a(matrix,200);
dtl::console::output::stl::stringBool(matrix, "##", "//");
return 0;
}
콘솔에서 출력할 수 있었습니다!
🌏완성🌏
무사히 구현할 수 있었습니다.
🌏 구현 라이브러리 (소스 코드) 🌏
이번 해설한 동굴의 자동 생성은 "던전 템플릿 라이브러리" 에 "Simple Cellular Automaton Island" 로 구현되어 있습니다.
꼭 활용해보세요!
🌏 소스 코드 라이센스 🌏
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(지형 생성 (셀 오토 마톤 법) 🌏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/d460aba1384634f0b6dc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
namespace dtl {
template<typename Int>
class SimpleCellularAutomatonIsland;
}
셀 오토마톤 섬 생성 (public)
template<typename Matrix_>
constexpr void create(Matrix_& matrix_, const std::size_t max_value_ = 2) const noexcept {
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] = 1;
}
"create関数"
는 육지 생성하는 함수입니다.화면의 후지 이외의 장소에 무작위로 육지를 설치합니다.
🌏 지각 변동🌏
지각 변동template<typename Matrix_>
constexpr void create(Matrix_& matrix_, const std::size_t max_value_ = 2) const noexcept {
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] = 1;
for (std::size_t i{}; i < max_value_; ++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;
}
}
}
지각 변동을 일으켜 육지를 이동시킵니다.
🌏 지각 변동을 반복합니다 🌏
단지 오로지 지각 변동을 일으킵니다.
좋은 것 같은 지형이 되었을 때 멈춥니다.
지각 변동의 마지막은 모두가 바다의 바닥에 가라앉습니다.
🌏CUI로 출력🌏
cui#include <array>
#include "DTL.hpp"
int main() {
using dungeon_t = bool;
std::array<std::array<dungeon_t, 128>, 128> matrix{ {} };
dtl::generator::terrain::stl::SimpleCellularAutomatonIsland<dungeon_t> a(matrix,200);
dtl::console::output::stl::stringBool(matrix, "##", "//");
return 0;
}
콘솔에서 출력할 수 있었습니다!
🌏완성🌏
무사히 구현할 수 있었습니다.
🌏 구현 라이브러리 (소스 코드) 🌏
이번 해설한 동굴의 자동 생성은 "던전 템플릿 라이브러리" 에 "Simple Cellular Automaton Island" 로 구현되어 있습니다.
꼭 활용해보세요!
🌏 소스 코드 라이센스 🌏
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(지형 생성 (셀 오토 마톤 법) 🌏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/d460aba1384634f0b6dc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
template<typename Matrix_>
constexpr void create(Matrix_& matrix_, const std::size_t max_value_ = 2) const noexcept {
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] = 1;
for (std::size_t i{}; i < max_value_; ++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;
}
}
}
단지 오로지 지각 변동을 일으킵니다.
좋은 것 같은 지형이 되었을 때 멈춥니다.
지각 변동의 마지막은 모두가 바다의 바닥에 가라앉습니다.
🌏CUI로 출력🌏
cui#include <array>
#include "DTL.hpp"
int main() {
using dungeon_t = bool;
std::array<std::array<dungeon_t, 128>, 128> matrix{ {} };
dtl::generator::terrain::stl::SimpleCellularAutomatonIsland<dungeon_t> a(matrix,200);
dtl::console::output::stl::stringBool(matrix, "##", "//");
return 0;
}
콘솔에서 출력할 수 있었습니다!
🌏완성🌏
무사히 구현할 수 있었습니다.
🌏 구현 라이브러리 (소스 코드) 🌏
이번 해설한 동굴의 자동 생성은 "던전 템플릿 라이브러리" 에 "Simple Cellular Automaton Island" 로 구현되어 있습니다.
꼭 활용해보세요!
🌏 소스 코드 라이센스 🌏
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(지형 생성 (셀 오토 마톤 법) 🌏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/d460aba1384634f0b6dc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <array>
#include "DTL.hpp"
int main() {
using dungeon_t = bool;
std::array<std::array<dungeon_t, 128>, 128> matrix{ {} };
dtl::generator::terrain::stl::SimpleCellularAutomatonIsland<dungeon_t> a(matrix,200);
dtl::console::output::stl::stringBool(matrix, "##", "//");
return 0;
}
무사히 구현할 수 있었습니다.
🌏 구현 라이브러리 (소스 코드) 🌏
이번 해설한 동굴의 자동 생성은 "던전 템플릿 라이브러리" 에 "Simple Cellular Automaton Island" 로 구현되어 있습니다.
꼭 활용해보세요!
🌏 소스 코드 라이센스 🌏
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다.
꼭 자유롭게 변경하여 놀아보세요.
끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(지형 생성 (셀 오토 마톤 법) 🌏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/gis/items/d460aba1384634f0b6dc
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
These codes are licensed under CC0.
이 기사의 소스 코드는 CC0 라이센스입니다. 꼭 자유롭게 변경하여 놀아보세요. 끝까지 읽어 주셔서 감사합니다!
Reference
이 문제에 관하여(지형 생성 (셀 오토 마톤 법) 🌏), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/gis/items/d460aba1384634f0b6dc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)