個人制作ゲームの進捗状況・ゲーム作りに役立つ情報を発信

ダンジョン自動生成アルゴリズム|らんだむあくしょん!制作記録2

らんだむあくしょん!制作記録

どうも! 個人ゲーム開発者の長井長縄です!

今回は第2回目の制作記録です。
前回から3週間以上経ったこともあり、それなりに進捗がありました。

ダンジョンが大幅進化したこともあり、だいぶローグライクっぽくなってきたと思います!

今回制作したもの

それでは早速今回制作したものの紹介に入りましょう!
まずはこちらです!

ついに原始人卒業! 服を着たプレイヤー!

まずはなんといってもこれでしょう。
プレイヤーさんが服を着用しました!

Xでのプレイヤーさんの初出は2023年12月24日ですから、2024年2月1日に服を着てもらうまでの実に40日間、裸で過ごして貰っていました。

その間制作者の私は何をしていたかというと、マップ描画とかモバイル対応とかの他の機能の開発にかまけていて、長い間プレイヤーさんは裸で放置。
服着用のプログラムを書くのはめっちゃ簡単だったんで、さっさと着せてあげても良かったなと今は思います。

まぁ何はともあれ、プレイヤーさんも着衣という文化的な行為を習得したので、今後はちょっとプログラムをいじれば着せ替えとかもできそう。
というか着せ替えは実装予定で、防具とか装備したら鎧っぽい見た目とかに変えようかな〜と画策しております!

ぬるぬる動く! なめらかマップスクロール!

お次はこちら。
なめらかに移動するマップスクロールの導入!

これの実装は少し大変でしたが、1フレームごとに動かすピクセル数を求めて、その分だけズラして描画していくことで実装しました。

やっぱりなめらか移動は必須。

ただの四角じゃなくて形が変わる! ダンジョン部屋自動生成!

そしていよいよ、今回のタイトルにもあるダンジョン自動生成です!
まずは部屋から。

簡単にどういう仕組みで作ってるか解説すると、「部屋の最小サイズ」の周囲数マスを確率で部屋にするか決めてる感じです。

今回の場合で言うと、「部屋の最小サイズ」を4マス、「部屋の最大サイズ」を8マスに設定してるので、4×4マス分はまず確定で部屋となります。
最大サイズが8マスなので、4×4の上下左右周囲2マス分が確率で部屋になる領域で、各マスの乱数が一定値以下かつ部屋と隣接していればそのマスも部屋になります。

図解すると以下のような感じ。黒い部分がランダムに部屋になるか決まる領域です。

⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎
⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎
⬛︎⬛︎⬜︎⬜︎⬜︎⬜︎⬛︎⬛︎
⬛︎⬛︎⬜︎⬜︎⬜︎⬜︎⬛︎⬛︎
⬛︎⬛︎⬜︎⬜︎⬜︎⬜︎⬛︎⬛︎
⬛︎⬛︎⬜︎⬜︎⬜︎⬜︎⬛︎⬛︎
⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎
⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎

丸っこい部屋になりやすいアルゴリズムは、この部屋になる確率をいい感じに調整してます。
他にも各部屋が重なったり近すぎたりしないよう、部屋間隔の調整とか色々してるんですが、大体はこんな感じです。

全ての部屋を繋ぐ! ダンジョン通路自動生成!

さてラストです!
部屋と来たら今度は通路!

大雑把な仕組みとしてはこんな感じです。
「部屋1」と「部屋2」、そして通路の「中間経由地点」がある。
「部屋1」と「中間経由地点」、「中間経由地点」と「部屋2」をそれぞれ直線で繋ぐ。

図解するとこんな感じ。


  部屋1 ⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎⬛︎ ←中間経由地点
      」     ⬛︎
            ⬛︎
            ⬛︎
            ⬛︎
         「
           部屋2
               」

広い通路の方は、通路の周り1マスを部屋の時みたいに確率で広げてる感じですね。

通路生成の仕組みは結構単純だし、すぐ実装できるかと思ったんですが、意外と苦戦しました。
理由は直線を引くのが結構大変だったからです。

よくある直線描画アルゴリズムだと、こんな感じになります。
角度のある線の場合、マスの切り替わり部分が斜めに繋がるんですね。

⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎
⬜︎⬛︎⬛︎⬛︎⬛︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎
⬜︎⬜︎⬜︎⬜︎⬜︎⬛︎⬛︎⬛︎⬛︎⬜︎⬜︎⬜︎⬜︎⬜︎
⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬛︎⬛︎⬛︎⬛︎⬜︎
⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎

ただ今回はプレイヤーが部屋と部屋を移動できないといけないので、斜めに繋がるのは駄目です。
こんな感じでしっかり上下左右が隣接していないと通れません。

⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎
⬜︎⬛︎⬛︎⬛︎⬛︎⬛︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎
⬜︎⬜︎⬜︎⬜︎⬜︎⬛︎⬛︎⬛︎⬛︎⬛︎⬜︎⬜︎⬜︎⬜︎
⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬛︎⬛︎⬛︎⬛︎⬜︎
⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎⬜︎

そんなこんなで既存のアルゴリズムが使えず、自分で実装したので少々面倒でした。
まぁできたのでヨシ!

全体の制作状況

さて、今回制作したものは以上です!
ここからは全体として、今の制作状況はどの辺なの? ってことを説明します。

まずゲーム制作は、大体こんな工程で進みます。

  • 企画(ゲームの内容を考案)
  • プロトタイプ(ゲームのメインとなる部分が遊べる)
  • アルファ版(画像や音などの素材は仮のものでいいので、ゲームに必要な機能が全て揃っている)
  • ベータ版(素材も含め、ゲームに必要な機能が全て揃っている)
  • マスターアップ(バランス調整なども含め全て完成)
  • リリース(世の中に公開)

私のゲームは、まだメインとなる部分が遊べる状態ではないので、今は「プロトタイプ制作」の途中という感じです。

企画は2023年の9月下旬くらいから12月中旬までやってたんで3ヶ月弱くらいですかね。
(構想自体はもっと前からあったんですが、本格的に企画してたのはこのくらい)

12月上旬〜中旬にゲームエンジンの選定をして、Ebitengineで制作することに決定。

12月17日から実際に制作開始したので、プロトタイプ制作を始めてから2ヶ月ちょっと。
企画3ヶ月+プロトタイプ制作2ヶ月で合計5ヶ月くらいやってるんですが、まだまだですね〜。

まぁ働きながらだし、最初から長期戦を覚悟してたのでじっくり行きますよ!

おわりに

今回はダンジョンの自動生成に関する処理を実装してました!

無事にダンジョンのフロアを生成できるようになったので、だいぶローグライク感が出てきたと思います!
敵とかアイテムとか出てきたらより「らしく」なると思うので、その辺り目指してコツコツ作っていくぞ〜。

また次回をお楽しみに!

コメント

タイトルとURLをコピーしました