どうも!LSSです!!
いまだ、迷路表現について考えています。
少しはまとまってきました。
前々回の記事
前回の記事
…なお、この記事は(前回・前々回もそうですが)またわけのわからない記事になりそうです^^;;;
ゲームプログラムを作る人は作る前にこんな事を考えてるんだー、的な内容です。
要は、
↑こういうタイプの迷路をどう表現するのがスマートか、という問題。
少し考えを整理しました。
まず、方眼紙のようなマス目の並びがあったとします。
で、この1マスが1つの座標を示す、とすると、X座標(横何マスめか)とY座標(縦何マスめか)の二次元配列を用意します。
と、ここまでは、薄壁じゃないタイプの迷路でも同じなんですが、さらにその1つのマスを
こう、4つの領域に区切り、2の部分が上の壁になる部分、3の部分が左の壁になる部分。
で、2の領域と3の領域をそれぞれデータに基づいて、壁なら黒く塗り、通過可能なら白く塗る。
という形で表現したマスを縦横並べると、薄壁迷路になります。
※前回の記事で悩んだのは、その「縦複数×横複数、並べた時に右辺と下辺が空いちゃう」のをなんとかしようとして、5×6とか6×5とかになってしまいましたが^^;
1の領域については「その上下左右のすべてが通過可能であれば白、ひとつでも壁があれば黒」で良いかと思います。
4の領域はそのマスそのもので、これもデータとして持ち、ゴール地点だったり、宝箱だったり、階段だったり、と考えるほど表現の幅が広がりますね^^
と、すると、1つのマスにつき、1は不要として、2、3、4の3つの領域についてのデータを持てば事足ります。
前回の記事の時に「視覚的にわかりづらい」というコメントをいただきましたが、まったくその通りで、「縦(左)の壁と横(上)の壁を別々の配列で管理」していた事も大きい要因かと思います。
それを少しマシにするには…「もう一つ配列の次元を増やして、3次元配列にする」という事をいまさら思いつきました。
( X座標 , Y座標 , 0~2 ) といった添え字(配列のうち何番目かを指定する数値)で構成し、最後の添え字が0の配列変数には左壁情報、1の配列変数には上壁情報、2の配列変数にはマス情報、って感じです。
具体的には、
↑のような3×3の迷路だったら、通過可能=0、壁=1、とした場合…
[[1,1,0],[0,1,0],[0,1,0]],
[[1,1,0],[1,1,0],[0,0,0]],
[[1,0,0],[0,1,0],[0,0,0]]
という配列。(マス情報は全て0、一番右と一番下は壁扱いとする、とした場合)
※追記:おっと、これだと(Y,X,マス情報ですね^^;)
今んとこ、こんな感じです。
右辺下辺問題は解決していませんが、迷路のスタンスが
「すべて壁にする」か
「ループ迷路にする」か
「超巨大迷宮」か
で対応が変わるところですね。
配列への問い合わせに関数を使用する事で、悩む事も減りそうです。
ところで、LSSがこんな事を考えてる間に、またまたアーシさんの新しい操作可能迷路が公開されました!!
5段階の難易度が用意されています!
自分も超巨大迷宮の難易度設定には悩みましたが、ライトに楽しみたい人も、ヘビーに楽しみたい人も、ゴールまで遊べる方法ですね^^