2012年2月17日金曜日

2D迷路データとその解を自動生成する(6):迷路の解を用いてゴール・敵・アイテムの配置を決める

このエントリでは、迷路の解を用いてゴール・敵・アイテムの配置を決める方法のヒントを示します。

これまでに、「2D迷路データとその解を自動生成する(4):「ポテンシャル法」で迷路を解いてみる」「2D迷路データとその解を自動生成する(5):「ポテンシャル法」で迷路を解くための実装」のエントリを通じて、次のようなデータを得られることについて述べてきました。

  • stepMap 迷路上のそれぞれの地点がスタート地点から何歩で到達できる場所なのかを示す2次元配列
  • stepList スタート地点からの同じ距離ごとに、迷路内地点のリストをまとめた2次元配列
  • pathStepTotal この迷路上に「道」のセルがいくつあるかを数える変数

迷路のゴール地点は、スタート地点から到達するのに、なるべく多くの歩数がかかるような場所にあるべきです。 そこで、stepListの配列の一番最後の要素を使うのです。これは、その迷路の中で、スタート地点から一番遠い地点を格納した配列になっています。 つまり、stepListの配列の一番最後の要素の配列のうち、いずれかの要素を選んでゴール地点とすれば良いと考えられます。 …あとは、ゴール地点の座標の周囲について、マップチップの内容を置き換える and/or 別のスプライトを重ねて置くことで、 いかにも「ゴールだ!」と分かるような見た目に演出してやればOKです。

なお、ここまでは説明の便宜上、「スタート地点」と、そこからの「同じ距離ごとの迷路内地点」という言い方をしてきました。 でも、これはようするに、迷路上の任意の地点Aから、任意の地点Bまでについて、最短距離での道のりの歩数を調べる方法を実現しているのです。 そう考えれば、この方法を応用して、いろいろなしくみを実現できることがわかります。

たとえば、ゲームスタート時に、敵キャラが主人公キャラのすぐ近くに居て、いきなりダメージを喰らってしまう!というのはアンフェアです。 そういうことがないように、敵キャラの初期位置は、主人公キャラから「一定以上の距離」になるようにするべきです。 このためには、stepListの配列で最初のいくつかの要素を除外したものから、敵を配置する場所の候補を作り出せば良いということになります。

また、アイテムを配置するときに、「扉」と「その鍵」を一定以上離れた場所に配置したいといったような場合、 ゲームプレイ中に、主人公キャラを追いかける形で、迷路の最短距離を賢く確実に移動する敵キャラを作りたい場合にも、 同じような方法を用いることができるでしょう。

ちなみに、現在のThe Flame Knightでは、ゴール地点の配置、敵キャラ・落ちているアイテムの配置をするときに、スタート地点からの距離を用いています。

0 件のコメント:

コメントを投稿