4次元パズル

「Miegakure」は4次元空間をフィールドとしたパズルゲームだそうだ(本家/.記事)。

公式サイトによると「見た目は3Dプラットフォームゲームと同じだが、ボタンを押すことによって次元を一つ、4次元と入れ替えることができる」とのことで、これを駆使してパズルを解くゲームのようだ。ゲームは現在開発中で、将来的にはPC/Mac版としてリリースしたいとのこと。デモ版などはまだない。

タレこみ人も頭がこんがらがりそうだが、デモ動画が公開されているのでそちらを確認して頂ければと思う。ちなみにこのゲームはIndependent Games Festivalの2010年度「Excellence In Design」部門の最終選考に残ったものだそうだ。

4次元パズルゲーム「Miegakure」 - スラッシュドット・ジャパン

このエントリのコメント欄でも書いたが、大昔、学生の頃、四次元迷路でASCII(コンピュータ雑誌)のコンテストに応募した事があった。
選考結果は佳作かなにかだったと思う。


当時はパソコン(とは言わなかったな。マイコン)を持ってる友人のアパートに入り浸ってBASICでゲームばっかり作ってた。
で、そこで本人視点の3D迷路というのをはじめて目にして、自分でも作ってみようと思ったのがきっかけ。
元のゲームは通常の平面の迷路を3D表示するだけのものだったから、上下にも移動できる本当の3D迷路を作ろうと思った。
普通の2次元迷路を自動生成するアルゴリズムはそれほど難しくないし、ちょっと工夫すれば3D迷路の自動生成も出来るようになった。(迷路を格納する二次元配列を三次元配列に変え、迷路を掘って行く方向を4方向から6方向に拡張するだけ)
だから、それを4次元配列に拡張するのもたいした問題ではなかったと思う。(迷路を格納する配列を4次元にして、迷路を掘って行く方向を8方向に拡張するだけ)


今思えば、次元の呪いの一端に触れたのはこのときだったな。迷路の各辺のサイズをちょっと大きくしただけで配列サイズが巨大になる。


最初に作った3次元迷路は、前進、後退、右を向く、左を向く、の4通りの操作に加えて、上下方向に移動できる場所では、上の階(Z軸正方向)に移動、下の階(Z軸正方向)に移動というシンプルなものだったと思う。
基本的操作は、平面迷路のX-Y平面だけで向きを変えて移動するものだった。


そこに上下方向を向く機能を作っただけで、ぐっと迷路が難しくなった。
移動は「前進」、「後退」のみ。右に行くときも上に行くときも、まずそちらを向かなければいけない。
重力方向の感覚が伴わないから、今上を向いてるのか前を向いてるのかわからなくなる。
それに、上方向を向いてる状態で、自分基準でもう一度上を向くと上下がひっくり返った状態で後ろを向いてしまう。
そこで画面の端にコンパスと水準器を表示するようにした。



これはiPhoneのゲームらしい。こういうグラフィック(と視点設定)だと上を見上げてるのがはっきりわかるね。
当時はそんな事は不可能だった。


4次元に拡張したときも、最初は、上記操作に加えて、「あっち」(W軸正方向)に移動、「そっち」(W軸負方向)に移動を加えただけ。


しかし上を向く(Z軸正方向を向く)代わりに「あっち」(W軸方向)を向くことも可能ではないか?


そう考えたところで行き詰った。
Y軸方向を向いている状態で上(Z軸正方向)を向くというのは、X軸回転だ。
ではY軸からW軸方向に向きを変えるというのは、「何」回転なのか?


件の"miegakure"のページにヒントがある。FLASHのアニメーションによる4次元超立方体投影図のできるまで。このアニメは当時おいらがよすがにした図とほぼ同じ。
ゼロ次元の点をX軸方向に伸ばすと線分が出来る。
この線分をX軸と直交するY軸方向に伸ばすと正方形になる。
できた正方形をX軸ともY軸とも直交するZ軸方向に伸ばすと立方体になる。
そして、この立方体をさらに、X軸ともY軸ともZ軸とも直交するW軸方向に伸ばすと4次元超立方体ができる。


この考え方で行くと、回転軸を4次元方向に伸ばせば、回転「平面」になるのではないか?


そう考えたらうまく解くことができた。
実際4次元空間では、X-Y軸を入れ替える回転操作で不動なのはZ軸ではなくW-Z平面になる。


それから何年も経って、3Dゲームのプログラミングでメシを食うようになっていた頃、後輩にその話をしたら、4次元の回転行列をつくれば必然的に出てくる結果である事を指摘された。
言われてみれば、なるほどまったくそのとおり。
頭ひねらなくても解析的に解けちゃったりするのが数学のやらしいところだね。


さて、おいらの迷路ゲームには、マップ表示機能もつけていた。
3次元迷路なら、1階、2階、3階と階を分けて縦に並べて図示し、上下階を結ぶ通路を上矢印、下矢印で表示した。
4次元迷路に拡張した際は、上記の3次元迷路マップを4次元階層分横に並べて、4次元方向の通路を左右矢印で図示。

これは自分ながら良いアイディアだと当時思ったし*1スラッシュドット・ジャパンのコメント欄にもそう書いたけど、「4次元迷路」でぐぐってみたらまったく同様の図が見つかった

うーん。やっぱり皆同じ事を考えるんだなぁ。
この図を使わせてもらおう。
こんなかんじ

*1:「4次元迷路」でぐぐってみつけたこの動画、良いアイディア。これ以上判りやすいインターフェースはちょっとないんではないかな