こんばんは。
質問中で頂いているような二次元配列を使って迷路を構成するのであれば、
以下のような考え方ではいかがでしょうか?
迷路そのものは格子状に切られていても、360度を見渡せるような形式には出来るのではないかと考えています。
(Y字路のような上下左右に限定されない分かれ道の再現をしたい場合は、kutsulogさんのような配列データの考え方に工夫が必要になると思います。格子状のデータから迷路を構築する場合は、斜めの表現は少し大変そうな印象です。)
二次元配列の1つの値(壁or通路)をXY空間で大きさを持ったタイルにして考えてやることで
例えば、1つのタイルを100x100の大きさとして、左上(1のタイル)の角の座標を
(x, y) = (0, 0)と決めれば、
自分の位置[緑の円]を(x, y) = (150, 350)のように決められると思います。
加えて、向いてる方向を赤の矢印のように決めてやれば一歩(一度に進む距離)の大きさで
移動後の位置も決められますし、移動後の位置が「壁」か「通路」かも判断ができます。
・二次元配列のデータをXY空間に展開?する
・自分の位置、向きというパラメータを設定する
・一歩で移動する距離、進行方向を変える際の角度を決める
これらを考える事で、「360度自由に」が実現出来るように思えます。
一回の移動量が1マスという前提でしたらすいません。
----- 追記 -----
後で気が付きましたが、穴がありました・・・
以下のようなケースだと、多分大回りが必要だと思えますが
赤の矢印方向に移動するとして単純に移動後の位置が配列上の0か1かで判断してしまうと、通り抜けられてしまいます。
これを回避するためには、
a)二次元配列データに壁のルールを設ける(壁には最低「配列の1要素」の厚みが必要)
b)配列の隣り合う要素間の境界を考慮する
のいずれかが必要ですね。圧倒的に(1)の方法が簡単ですが
あと、ゲームという事ですし「360度自由に」との事ですので、「探索」をするのはユーザー(人間)を想定していました。(勘違いでなければ良いのですが)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/10 12:52
2015/09/10 13:53 編集
2015/09/11 02:28
2015/09/11 03:15