昨日目標としていた「部屋が重ならないように自動で配置する」という課題は、午前中に終わった。
重なり判定の関数が部屋の数だけ実行されるはずなのに、なぜか1回しか実行されないなどのバグに悩まされたが、単純にreturn文を書く場所がおかしかっただけだった。
重なり判定は、部屋を一つの矩形と考えて、矩形同士の当たり判定で重ならないようにした。
参考にした記事がこちら
部屋の生成は5部屋行われる。
縦横7から13ブロックの大きさでランダムに部屋が生成され、領域外や重なりが無いことが確認出来たらRoomクラスに部屋の情報を入れるようにしている。
ちなみに1ブロックのサイズは48×48ピクセルにしている。これは、ゆるドラシルのプレイヤー素材に合わせたらこうなった。
フィールドの大きさは、縦40ブロック横50ブロックで作っているけど、もう少し大きくなるかもしれないし小さくなるかもしれない。
通路生成を実装しようとしたときに「あっ、これ今のコードじゃ無理だわ」となったので、やっぱり書いてから作ることにした。
ダンジョンが生成されるまでの流れ
- フィールドをブロックで埋める
- フィールドを4つに区分けする
- 区分けごとにブロックを掘って部屋を作る
- 部屋から区分け線まで通路を掘り、区分け線に沿って通路をつなげる
という感じに作り直そうと思ったが、いろいろと用事があってここまでしかできてない。
明日は上に書いた内容をやりたいと思う。