-- / --
--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

03 / 03
Mon

Ziphil です。

昨日はランダムダンジョンを自動生成するコードを書いたわけですが、 やっぱりあれを洞窟のダンジョンに使うには不自然。 ということで、 自然物のダンジョンをそれっぽく生成する方法を考えてみます。

昨日のアルゴリズムの何が不自然かと言うと、 一番は部屋の形でしょう。 長方形ですから、 自然物らしくありません。 そこで、 長方形の部屋の角や辺を少し削って、 部屋に丸みを帯びさせるというのが最も簡単です。

根本からアルゴリズムを見直してみましょう。 こんな生成方法が思いつきます。

  • 適当な位置を中心とし、 楕円状の通過領域を作る。
  • 適当な方向に移動し、 同じように楕円状の通過領域を作る。
  • 上の移動を何度か繰り返す。

楕円状の通過領域の形を毎回微妙に変えてやれば、 それっぽい洞窟の通路ができそうです。 まあ、 これだけでは一本道なので、 分岐を作ったりの処理も入れなければなりませんが。

こんな方法も思いつきました。

  • マップ全体に閉曲線の通過領域を描く。
  • 通過領域の適当な 2 点を結ぶ、 適当な曲線の通過領域を描く。
  • 上の曲線の描画を何回か繰り返す。
  • 閉曲線になっている部分をいくつか選び、 その内部を全て通過領域として部屋を作る。

直線要素がなくなるので自然物らしくはなりますが、 閉曲線を描くアルゴリズムが難しそうですね。

さて、 左上にミニマップそ表示するプログラムを追加したので、 昨日のアルゴリズムで生成したランダムダンジョンのサンプルを上げておきましょうか。 サイズは 80×80 です。

771_製作過程A

ちなみに、 変に細長い部屋が作られないように、 領域が縦長なら横に分割し、 領域が横長なら縦に分割するように、 昨日のプログラムを改良してあります。 また、 領域の最小の長さを、 5 から 10 に変更してあります。

上の画像ではよく分かりませんが、 実は FPS が設定値の 40 を下回っています。 やっぱり描画が遅いみたいで、 これは昔 StarRuby のときにやっていた軽量化処理を施さないといけないのでしょうか。

スポンサーサイト

comment ×0
コメント
管理者にだけ表示を許可する
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。