Help us understand the problem. What is going on with this article?

洞窟の自動生成(ローグライク穴掘り法)💀

💀洞窟を創造する💀

rlcave.gif

今回は洞窟をつくります。

💀ローグライクのおさらい💀

>> [DTL]ローグライク(穴掘り法)💀

以前作ったローグライク穴掘り法のアルゴリズムを使用します。
詳しくは前回の記事をご参照ください。

rl4.gif

💀手順💀

1. ローグライク穴掘り法でローグライクダンジョンの生成
2. 1以上の数値と0の数値で2値化する
3. ノイズを加えて洞窟っぽくする

こんな感じでいきます。

1.ローグライク穴掘り法でローグライクダンジョンの生成

前回の解説記事の時に作った"RogueLike関数"を使用します。

生成
int main() {
    std::array<std::array<std::uint8_t, 64>, 32> matrix{ {} };
    dtl::RogueLike<std::uint8_t> d(matrix, 20);
}

rl.gif

2. 1以上の数値と0の数値で2値化する

dtl::RogueLike<std::uint8_t> d(matrix, 20);
dtl::dungeonBinarization(matrix_, 1);
ID 名前
0. 外壁 ■■■■
1. 内壁 ■■■■
2. 部屋 ■■■■
3. 玄関 ■■■■
4. 通路 ■■■■

1以上の数値を1に変えます。

rlcave_no.gif

ほんの少し洞窟みが出てきました。

3. ノイズを加えて洞窟っぽくする

このままだとあまり洞窟っぽくないのでノイズを加えます。

dtl::RogueLike<std::uint8_t> d(matrix, 20);
dtl::dungeonBinarization(matrix_, 1);
dtl::noiseShoreBothBool(matrix_, 0.1);

💀完成💀

無事に実装できました。

rlcave.gif

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

今回解説した洞窟の自動生成は"Dungeon Template Library""RogueLike Cave"として実装されています。
ぜひ、活用してみてください!

logo640.gif

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

These codes are licensed under CC0.
CC0

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

最後までお読みいただきありがとうございました!

gis
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away