top
[Index(X)][Back(B)]

迷図

画面写真

※画像をクリックすると、原寸大で表示されます。

タイトル画面 ゲーム画面

作品情報

作品名:
迷図(めいず)
作者名:
はりまお
制作完了日:
2010年05月11日
制作環境:
Pentium M 1.73GHz + 1GB RAM
WindowsXP Home Edition SP3 + Visual Basic 2008 Express Edition
動作環境:
要 Microsoft .NET Framework 3.5
要 マウス

ファイル

"Maze.zip" [ダウンロード](配布ファイル更新日:2025年01月27日)
ソース フォルダ
"Maze"
実行ファイル
"Maze.exe"
説明文
"readme.txt"

概要

至極単純な迷路を遊びたくて創っちゃいました。
遊び方・プログラム共に、“シンプル”を目指してみました。ちなみに、マウス以外でのプレイは想定しておりませんのであしからず。

インストール・アンインストール

特別なインストール作業はありません。お好きなフォルダの中に、解凍してください。ソース フォルダは、必要に応じて使用してください。

アンインストールする時は、フォルダごと全てのファイルを削除してください。
レジストリを変更したり、ファイルを生成したりといったことは、一切行っていません。

遊び方

"Maze.exe"を実行すれば、タイトル画面が表示されます。 終了するときは、ウィンドウのタイトル右側の赤い×ボタンをクリックしてください。

タイトル画面で、ウィンドウ内のどこでも良いのでクリックすればゲームが始まります。また、タイトル画面の中央部分にある3つの項目をクリックするかホイールを回すことで、「目隠しレベル」を指定できます。

迷路は、マウスの左ボタンを押しながら通路をなぞって進んでいきます。
左ボタンを離すと、ポーズ状態になり、迷路が隠されてレベルと迷路内での現在位置を表す黄色い円が表示されます。ポーズ中は、マウスを動かしても迷路には影響しませんので、マウス位置を調整するなどしてください。再び、ウィンドウ内で左ボタンを押すとポーズが解除されゲームが再開します。この時、マウスカーソルを黄色い縁の位置に合わせる必要はありません。自動的に中断位置へ移動します。

迷路は、赤がスタート、青がゴール、白線が壁です。ゴールへ到達する道は、一本しかありません。マウスカーソルが壁に当たるとゲームオーバーです。マウスカーソルがゴールに入るとクリアとなり、迷路の全体図と辿った経路が表示されます。そこで、どこでも良いのでクリックすると、次のレベルへ進みます。レベル14をクリアするとレベル0に戻ります。

迷路の中を進んでいる間、「目隠しレベル」を[あいだ]以上に設定した場合は、マウスカーソルを中心にした一部の範囲しか見えないように目隠しがされます。

右クリックで、迷路を画像としてクリップボードに取り込めます。ゴール後にコピーすると、プレイした経路も一緒に取り込めます。

プログラムについて

プログラム的には、まったく特別なことも難しいこともやっていません。規模も大きくないので、改造も難しくはないと思います(プログラムが汚かったらゴメンなさい)。

迷路の作成方法

迷路の作成には、「穴掘り法」を採用しています。ランダムな位置から掘り始め、掘り進んだ経路の記憶にはキュー(先入れ先出し)を使っています。

壁の判定

壁への衝突判定については、あまり厳密な処理を行わず、ある部屋とその部屋を取り巻く壁しか見ていません。具体的には、前いた部屋(マウスカーソルがあった場所)から、現在の部屋(マウスカーソルがある場所)がある“方向”に移動可能か(壁があるか)で判定しています。

また、マウスの移動は、Windowsの反応速度([MouseMove]イベント)に依存しているので、それより早く動かしてしまうといろいろと不都合が発生するかもしれません。(Windowsの裏側について詳しくないので真相は分かりませんが・・・)
たとえば、例1のようなL字に曲がった通路があったとします。以前A地点に居て、Windowsが気付いた時にはC地点に移動してしまっていたとき、自分ではA→B→Cのつもりでもプログラム側ではA→Cへ抜けたとみなして壁激突となるわけです。
さらに、例2のような通路の場合、部屋Aから部屋BへWindowsの反応速度を超えて移動した場合を見てみましょう。今回のプログラムは、以前居た部屋から進んだ方向に壁があるかしか見ていません。部屋Bは部屋Aから見て右になるので、部屋Aの右側に壁があるかを見ます。すると、その方向には壁がないので、部屋Aから部屋Bへは、通過可能ということになってしまいます。

例1 例2
┼─┼─┼
 A B│
┼─┼ ┼
│ │C│
┼─┼─┼─┼
 A  │B│
┼─┼ ┼ ┼

 これらの問題を正攻法で解決しようにも、物凄く大変なことになりそうで上手く処理する方法が思い浮かびません。
しかし、Windowsの反応速度は結構速いので、その反応速度を超えて数部屋分一気にマウスを動かすのは至難の業だと思います。ということで、斜め移動問題への対処として斜め方向の移動可否データも持たせれば一件落着できるかもしれません。具体的には、右下の部屋へ移動した場合、「(元部屋から右へ行けて、その部屋からさらに下へ行ける)または(元部屋から下へ行けて、その部屋からさらに右へ行ける)」なら、移動可能と判断してしまうのです。
とは言っても、今作品はタイムアタックではないのでそこまで厳密にする意味もないのかもしれません。なので、壁に当たらないようにハラハラドキドキしながら慎重にゆっくり迷路を進んでいくのが吉だと思ってください。

改造について

極力シンプルにすることと、自動作成でできた迷路には難易度のバラつきがあることから、今回はタイムアタックという形をとっていません。それでも、「そんなの関係ねぇ」という人は、自分で改造してみてください。
また、迷路内に数箇所チェックポイントを作って、そこを通過しておかないとゴールできないようにしてオリエンテーリング風って言うのも面白いかもしれません。

世の中には、迷路作成アルゴリズムが色々ありますので、根本的に迷路の作成方法を色々と変えてみるのもいかがでしょうか?

開発こぼれ話

Visual Basic 2008のインストール記念ということで、昔にMSX・FANのファンダムに掲載されていたマウスで遊ぶ迷路ゲームを思い浮かべながら創りました。いゃ〜、本当にシンプルな迷路ゲームやったけど、これが面白くてかなりお気に入りやったなぁ。

「シンプル シンプル」と言いながら、創り始めてから早数年経過しちゃってる・・・。
何でこんなに掛かってるかと言いますと、実は、もっと前に一度完成していたのです。そんで、久しぶりに遊んでたら致命的なことに気付いちゃった。それは、とりあえず出てきた分岐を曲がってれば迷うことなく高確率でゴールできちゃうってことに。まぁ大変ってんで、迷路作成アルゴリズムを入れ替えたっちゅう訳ですわ。その他にも、細かい改良を繰り返してます。

迷路を作成する「穴掘り法」ってのは、穴掘りの過程を記憶しておく必要があるんですよ。最初、その処理が簡素に(コードが短く)書けそうな再帰呼出でやってみたんやけど、再帰呼出できる深さ(回数)の限界があるみたいで、しかも意外と浅くてエラーが出てしまう。しかたないから、キューを使って記憶することにしちゃった。こんな制限がキツイなんて知らんかった。でも、キューも便利やし、まぁいっかな。
それと、ゴールへ通じる経路が、迷路全体をバランス良く通っていると小さな幸せを感じてしまうね。何でやろなぁ。

迷路を遊んでいると、ついつい目で先読みしてしまうでしょ? そしたら、分かれ道で迷わないし袋小路にもはまり込まないし、なんとも興醒め。そこで、“目隠し”を創ってみました。大して目新しくないし技術的にも大したことないけど、なかなか効果的やった(パソコンへの負荷は上がったけど)。目隠しの大きさで、難易度も調整できるし、結構進んでみたら行き止まりやったときなんか、「やられたぁ〜」って思っちゃうし、ドキドキするし。

取りあえず最終はLevel14ってことになってるけど、Level14ともなると通路の幅が1ドットしかないし、マウスカーソルと壁が同じ白色で重なるので、はっきり言ってクリアできるもんじゃぁないよね。まぁ、クリアしたからって何もないわけやし、「できひんやないか!!」って怒らんといてね。

拝借物

アイコン作成ツール
IconEditor LittleCanvas Ver 1.14

参考文献

ウェブ サイト
DOBON.NET
Visual Basic 中学校
雑誌
MSX・FAN(徳間インターメディア) 1992年5月情報号 「マウスゲーム#1」 MIJINKO-SOFT 作
[Top(T)][Index(X)][Back(B)]