名称の自動生成法🏠

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

![TownName.gif](https://qiita-image-store.s3.amazonaws.com/0/213065/74a61804-4635-8346-cee1-c1862304b090.gif)

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

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

今回生成するRPGフィールドマップの**自動生成アルゴリズム**は、[**"セルオートマトン法"**](https://qiita.com/Gaccho/items/e29f98a32ba9f920346d)を使用します。
[**(>> セルオートマトン法について解説した記事はこちら)**](https://qiita.com/Gaccho/items/e29f98a32ba9f920346d)

### 🏯初期国家の生成🏯

最初に設置する初期国家の生成は[**"イベント生成"**](https://qiita.com/Gaccho/items/2269dc8f01d6faf24cb3)を使用します。
[**(>> イベント生成について解説した記事はこちら)**](https://qiita.com/Gaccho/items/2269dc8f01d6faf24cb3)

### 🎵カタカナの50音(+濁音・半濁音)を用意🎵

```cpp
constexpr std::array<std::string_view, 69> aa{ {"ア","イ","ウ","エ","オ","カ","キ","ク","ケ","コ","サ","シ","ス","セ","ソ","タ","チ","ツ","テ","ト","ナ","ニ","ヌ","ネ","ノ","ハ","ヒ","フ","ヘ","ホ","マ","ミ","ム","メ","モ","ヤ","ユ","ヨ","ラ","リ","ル","レ","ロ","ワ","ガ","ギ","グ","ゲ","ゴ","ザ","ジ","ズ","ゼ","ゾ","ダ","ヂ","ヅ","デ","ド","バ","ビ","ブ","ベ","ボ","パ","ピ","プ","ペ","ポ"} };
```

ヲやン等、一部の文字は省いています。

### 💻乱数を用意💻

```cpp
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`**は町の名前の最小と最大の文字数を決めています。

```cpp
std::string str{};
for (int i{}, maxx{ uid2(mt) }; i < maxx; ++i) str += aa[uid(mt)];
str += "の町";
```

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

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

名前が生成されました！


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

![TownName.gif](https://qiita-image-store.s3.amazonaws.com/0/213065/74a61804-4635-8346-cee1-c1862304b090.gif)

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

# 🔥応用編🔥

```cpp:ローマ字
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](https://qiita-image-store.s3.amazonaws.com/0/213065/bc755b69-ccf3-578a-b248-687905e75d1f.gif)

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

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

![town.gif](https://qiita-image-store.s3.amazonaws.com/0/213065/7e8ba3f8-f2a8-1e23-ab69-ff7a6927916e.gif)

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

# [実装ライブラリ(ソースコード)](https://github.com/Kasugaccho/DungeonTemplateLibrary)

今回解説した自動生成は**["Dungeon Template Library"](https://github.com/Kasugaccho/DungeonTemplateLibrary)**を使用して実装されています。
GitHubに全ソースコードを載せています。ご参考になれば幸いです。
ぜひ、活用してみてください！

[![logo640.gif](https://qiita-image-store.s3.amazonaws.com/0/213065/b84a7834-2042-6704-fbbe-782a31f06091.gif)](https://github.com/Kasugaccho/DungeonTemplateLibrary)


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

These codes are licensed under CC0.
[![CC0](https://mirrors.creativecommons.org/presskit/buttons/88x31/svg/cc-zero.svg "CC0")](http://creativecommons.org/publicdomain/zero/1.0/deed.ja)

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

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