LoginSignup
84
30

More than 3 years have passed since last update.

名称の自動生成法🏠

Last updated at Posted at 2019-03-31

🏠創った町に名前を付ける🏠

TownName.gif

今回は自動生成した町や城に名前を付けていきます。

🌏自動生成アルゴリズム🌏

今回生成する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 += "の町";

ランダムに取り出したカタカナから町の名前を生成します。

生成された町の名前
キチノの町
ウピゲの町
ベポカの町
メテチの町

名前が生成されました!

🌏完成(チュートリアル)🌏

TownName.gif

無事に名前を付けることが出来ました!

🔥応用編🔥

ローマ字
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

今度は町の名前をローマ字と一緒に生成してみます。

TownName2.gif

このようにローマ字も付属させることが出来ました。

🌳タイルとして書き出し🌳

town.gif

RPGマップチップタイルとして書き出すとよりRPGっぽくなりますね。

実装ライブラリ(ソースコード)

今回解説した自動生成は"Dungeon Template Library"を使用して実装されています。
GitHubに全ソースコードを載せています。ご参考になれば幸いです。
ぜひ、活用してみてください!

logo640.gif

ソースコードのライセンス

These codes are licensed under CC0.
CC0

この記事のソースコードはCC0ライセンスとします。
ぜひ、自由に改変して遊んでみてください。

"いいね"をつけてくださると大変励みになります。
最後までお読みいただきありがとうございました!

84
30
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
84
30