🏠創った町に名前を付ける🏠
今回は自動生成した町や城に名前を付けていきます。
🌏自動生成アルゴリズム🌏
今回生成するRPGフィールドマップの自動生成アルゴリズムは、"セルオートマトン法"を使用します。
(>> セルオートマトン法について解説した記事はこちら)
🏯初期国家の生成🏯
最初に設置する初期国家の生成は"イベント生成"を使用します。
(>> イベント生成について解説した記事はこちら)
🎵カタカナの50音(+濁音・半濁音)を用意🎵
constexpr std::array<std::string_view, 69> aa{ {"ア","イ","ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ","タ","チ","ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ","ミ","ム","メ","モ","ヤ","ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ガ","ギ","グ","ゲ","ゴ","ザ","ジ","ズ","ゼ","ゾ","ダ","ヂ","ヅ","デ","ド","バ","ビ","ブ","ベ","ボ","パ","ピ","プ","ペ","ポ"} };
ヲやン等、一部の文字は省いています。
💻乱数を用意💻
std::mt19937 mt;
std::random_device rd;
mt.seed(rd());
std::uniform_int_distribution<> uid(0, static_cast<int>(aa.size()) - 1);
std::uniform_int_distribution<> uid2(3, 6);
**uid
は文字データの配列の大きさ、uid2
**は町の名前の最小と最大の文字数を決めています。
std::string str{};
for (int i{}, maxx{ uid2(mt) }; i < maxx; ++i) str += aa[uid(mt)];
str += "の町";
ランダムに取り出したカタカナから町の名前を生成します。
キチノの町
ウピゲの町
ベポカの町
メテチの町
名前が生成されました!
🌏完成(チュートリアル)🌏
無事に名前を付けることが出来ました!
🔥応用編🔥
constexpr std::array<std::string_view, 69> aae{ {{"a"},{"i"},{"u"},{"e"},{"o"},{"ka"},{"ki"},{"k"},{"ke"},{"ko"},{"sa"},{"shi"},{"s"},{"se"},{"so"},{"ta"},{"chi"},{"tu"},{"te"},{"to"},{"na"},{"ni"},{"nu"},{"ne"},{"no"},{"ha"},{"hi"},{"f"},{"he"},{"ho"},{"ma"},{"mi"},{"m"},{"me"},{"mo"},{"ya"},{"yu"},{"yo"},{"la"},{"li"},{"l"},{"le"},{"lo"},{"wa"},{"ga"},{"gi"},{"g"},{"ge"},{"go"},{"za"},{"ji"},{"z"},{"ze"},{"zo"},{"da"},{"di"},{"j"},{"de"},{"d"},{"ba"},{"bi"},{"b"},{"be"},{"bo"},{"pa"},{"pi"},{"p"},{"pe"},{"po"}} };
スパジの町 Spaji Town
イマリの町 Imali Town
ゼケジの町 Zekeji Town
ミワフの町 Miwaf Town
今度は町の名前をローマ字と一緒に生成してみます。
このようにローマ字も付属させることが出来ました。
🌳タイルとして書き出し🌳
RPGマップチップタイルとして書き出すとよりRPGっぽくなりますね。
実装ライブラリ(ソースコード)
今回解説した自動生成は**"Dungeon Template Library"**を使用して実装されています。
GitHubに全ソースコードを載せています。ご参考になれば幸いです。
ぜひ、活用してみてください!
ソースコードのライセンス
These codes are licensed under CC0.
この記事のソースコードはCC0ライセンスとします。
ぜひ、自由に改変して遊んでみてください。
"いいね"をつけてくださると大変励みになります。
最後までお読みいただきありがとうございました!