MachiKania

3D Maze for MachiKania

2016年2月22日

マチカニア用のBASICで書かれたアプリケーションとして、立体迷路を作成しました。敷地に作られた平面状の巨大迷路に人が入って探索するアレ(迷路自身が立体というのではなく)の、シミュレーションです。

プログラムファイル(maze3d.bas)は、ここからダウンロードできます

このBASICプログラムは、MachiKania 1.0及びKM-BASIC web 0.5のどちらでも実行することが出来ます。

実行すると、次のような画面になり、横29ドット縦27ドットの迷路が作成されます。MachiKaniaでは1秒もかからないのであっという間に消えますが、KM-BASIC webは実行が遅いので、時間をかけて少しずつ作成される様子が分かります。
2016-02-21-canvas.png

迷路の作成が終わると、次のような画面に変わります。
2016-02-21-canvas1.png

ここからは、実際に迷路に入って探索するイメージです。床が黄色くなっていますが、これはスタート地点(Pos: 1,1)であることを示します。ゴール(Pos: 27,25)では、床が水色になっていますので、これを目指して進みます。左右のボタンで、右に向いたり左に向いたり出来ます。上ボタンで1ブロック前に進み、下ボタンでは1ブロック後ろに進みます。4つのボタンを操作しながら、迷路を探索するゲームです。
2016-02-21-canvas2.png

迷路は特に変わった構造になっているわけではなく、スタートからゴールまでの経路は1つだけです。右手法や左手法で、必ずゴールまでたどり着ける構造になっています。

ゴールが見えてくると、床が水色になっているのが分かります。
2016-02-22-canvas3.png

ゴールまでたどり着くと、経過時間が止まります。
2016-02-22-canvas4.png

"START"ボタンを押すと、別の迷路を探索できます。MachiKaniaをリセットすれば、同じ迷路をもう一度をトライすることが出来ます。迷路の形を覚えて、最短経路でゴールを目指し、所要時間を競うのも面白いかも知れません。操作に慣れてくれば、迷路の中を走り回るように移動することが出来るようになると思います。

開発について
このプログラムの開発は、2段階に分けて行ないました。迷路の作成部と、立体表示部です。

迷路の作成部
迷路のサイズとしては、とりあえず初期の作品として、ディスプレイにちょうど収まる大きさにしました。横29文字縦27文字で表示できます。コード中では、22行目あたり(REM construt a maze)から61行目あたり(cls)迄が、迷路作成部です。

2016-02-22-dmaze.png

まず上下左右のボーダーの壁を描画した後、中央部分を作成していくアルゴリズムです。X位置Y位置共に偶数の所には必ず壁があって(ピンと呼ぶことにします)、それぞれのピンは、上下左右のどこかに、追加の壁を持ちます。これを、左上部(Pos: 2,2)から右下部(Pos: 26,24)まで、順に描いていきます。追加の壁を上下左右のどこに描くかは乱数で決めるのですが、その描画の仕方によっては、迷路の一部が「ロ」の字の様な構造になり、進入できない領域が出来てしまうことがあります。このような構造になると、スタートからゴールまでの最短経路が複数出来てしまうようになってしまいます。

そこで、ピンと追加の壁を描くたびに、進入できない領域が出来ていないかの確認を行なっています。コードの126行目あたり(REM Walk from x-1,y-1 to 1,1)から140行目あたり(goto MC1)までがそれです。ピンの左上の場所からスタート地点までたどり着けるかどうかを調べています。アルゴリズムとしては、一度通った場所にマークを行ない、なるだけマークされていない通路を選びながら左上を目指すという物です。マークの回数が一定数(10)を超えると、たどり着けないと見なし、追加の壁の選択をやり直します。

どんな風に迷路が描かれるのか興味がおありの方は、KM-BASIC web 0.5でMaze 3Dを実行してみて下さい。少しずつ描画されていく様子が分かります。

立体表示部
迷路の立体表示には、PCG機能を用いました。次のような20個のフォントを作成しています。コードの260行目あたり(label INIPCG)から287行目あたり(return)がそれです。
2016-02-22-pcg.png


立体表示の形状の設計については、Power Pointを用いて行ないました。

2016-02-22-ppt.png

私が中学生・高校生の頃だと、グラフ用紙を用いて行なうところですね。最近は、こういったソフトウェアーが使えるので、便利です。

ディスプレイ上のどの位置にどのキャラクターを書くかのデーターは、DATAステートメントとして、289行目あたり以降に記述してあります。フォーマットはプログラムにも書いてありますが、次のような物です。
REM 3D view-drawing data
REM    +----------- first position
REM    | +--------- # of characters
REM    | | +------- increment value
REM    | | | +----- font # (+0x80)
REM    | | | |
REM  091230106

この例だと、TVRAM "091"番目の位置(X=1,Y=3)から"23"個のキャラクターを描きます。描画位置を"01"ずつずらしながら、キャラクター0x86 (0x80+"06")を描いていきます。描画部のルーチンは、68行目あたり(REM Create view data in w)から87行目あたりまで(if x=27 AND y=25 then GOAL)と、165行目あたり(REM @@@ -- bits 28-30)から194行目あたり(return)迄です。

コメント

BASIC LOVER (2016年12月9日 21:13:37)

Katsumi様
この3DmazeをMachiKaniaTypeZでコンパイル&Runさせたところ、迷路作成のあと、PosとTimeを表示して、バックスラッシュのようなグラフィックを少し描画したあと、フリーズしています。
よろしくお願いします。

Katsumi (2016年12月10日 16:20:29)

バグ報告、どうも有り難うございます。少し前に認識していたのですが、修正するのを失念していました。

とりあえず、Type Zではなく、Type N (初代MachiKania)で楽しんで頂けますでしょうか。

BASIC LOVER (2016年12月10日 19:06:50)

ご返信、ありがとうございます。
了解しました。TypeNを走らせます。

off white shoes (2019年1月13日 02:22:38)

http://www.ultra-boost.ca/ adidas originals ultra boost
http://www.adidasnmds.us/ adidas originals nmd
http://www.yeezy-950.us/ adidas yeezy
http://www.chaussurelouboutinpascher.fr/ christian louboutin
http://www.pandoras.in.net/ pandora jewelry
http://www.red-bottoms.ca/ louboutin
http://www.philipppleinoutlet.us/ philipp plein
http://www.nike-basketballshoes.us.com/ curry 5
http://www.bottesugg.fr/ ugg bottes
あって

コメント送信