どうも!LSSです!!
今回は「駄文中の駄文」カテゴリの記事ですwww
わりと昔から、ぼーっと考えてた事があります。
コンピュータ(パソコンであってもファミコンとかのコンシューマ機であっても)においての「迷路」の表現。
大きく分けて2種類にわかれます。
ひとつは↑こういうやつ。
マスごとに、壁か道かとなっているもの。
これはデータ的にも表現しやすいです。
ファミコンゲームでいうと、スクウェア(合併前)がディスクシステムで出してた「ディープダンジョン」なんかがこのタイプでした。
もうひとつは↑こういうやつ。
マスとマスの間が、通行可能か、通行不能な壁となっているか。
「紙に手書きで迷路を描こう」とした時なんかはたいていこのタイプになるんじゃないでしょうか?
ファミコンで言うと、「Wizardry(元はPCゲームですが)」なんかがこのタイプでした。
で、これについて何を考えてたかというと、
「前者の場合は単に2次元配列を用意して、そこが壁か道か(あるいは階段とか)ってデータを入れておくだけでいいけど、後者の場合はどのようにデータを扱うのが効率的に無駄がないんだろう?」
って事を、たまに思い出しては考えていたんですね。
やりようはいくらでもありそうで、そう難しい問題じゃないはず、なんですが、別に必要に迫られているわけでもないし、そう真剣に考えていたわけではないんですが…(言い訳)
不意にひらめきました!
↑この「縦線になってる壁」と「横線になってる壁」は「全くの別物」であり、上記のマス壁の時のように「ある時は縦だったものが横として見られる事もある」わけじゃないんだから、
「2次元配列を2つ用意すれば済む話」なんだ、と^^
つまり、縦線の壁の有無を tate という二次元配列で、横線の壁の有無を yoko という二次元配列で表現するなら、もし自キャラが今いるマスの座標が5,7だった時、左の壁は tate[5][7] 、右の壁は tate[6][7] 、上の壁は yoko[5][7] 、下の壁は yoko[5][8] を参照する、といった具合。
自分のいるマスにも意味を持たせたいなら、もうひとつ別に二次元配列を用意すれば済む話ですしね^^
…って、思いつくまでに時間がかかりすぎてて、自分の頭がだいぶ固くなってるなぁ、と改めて思いましたw