🌏国家を創る🌏
今回は自動生成した大陸に国家を建立していきます。
🌏自動生成アルゴリズム🌏
今回生成する地形の自動生成アルゴリズムは、"ボロノイ図法"を使用します。
(>> ボロノイ図法について解説した記事はこちら)
🏯初期国家の生成🏯
最初に設置する初期国家の生成は"イベント生成"を使用します。
(>> イベント生成について解説した記事はこちら)
dtl::utility::stl::setItem(matrix, n, set_value, clear_value);
setItem
関数で国家のスタート地点を設定します。
赤い点部分が国家のスタート地点です。
⚔領土の拡大⚔
領土拡大関数を宣言
template<typename Matrix_, typename Matrix_Int_>
void territoryExpansion(Matrix_& matrix_, const Matrix_Int_ find_value_, const Matrix_Int_ set_value_);
領土の周りを1/2の確率で領地にする
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] == find_value_) {
if (matrix_[row][col - 1] <= 1 && mersenne_twister_32bit.probability()) matrix_[row][col - 1] = set_value_;
if (matrix_[row][col + 1] <= 1 && mersenne_twister_32bit.probability()) matrix_[row][col + 1] = set_value_;
if (matrix_[row - 1][col] <= 1 && mersenne_twister_32bit.probability()) matrix_[row - 1][col] = set_value_;
if (matrix_[row + 1][col] <= 1 && mersenne_twister_32bit.probability()) matrix_[row + 1][col] = set_value_;
}
dtl::utility::stl::replace(matrix_, find_value_, set_value_);
各国家のスタート地点からじわじわと領土を拡大していきます。
陸地の領土がある程度埋まるまで拡大し続ける
100回の領地拡大を行う
for (int i{}; i < 100; ++i)
territoryExpansion(matrix, find_value, set_value);
これで海部分の領土を取り除けば完成です。
🌏完成🌏
無事に国家を建立することが出来ました!
実装ライブラリ(ソースコード)
今回解説した自動生成は"Dungeon Template Library"を使用して実装されています。
ぜひ、活用してみてください!
ソースコードのライセンス
These codes are licensed under CC0.
この記事のソースコードはCC0ライセンスとします。
ぜひ、自由に改変して遊んでみてください。
最後までお読みいただきありがとうございました!