意外と単純なアルゴリズム(考え方)で作れるので、ベースを作っていろいろ改造してみましょう。
元ネタ「『ゲームは自分で作るんだ!』MSX検定第2弾BASICプログラム編:MSX30周年 - 週刊アスキー」
ゴールまでの道筋が見えてしまわないように、歩いたところだけが見えるようにします。
真っ白のキャラクターは、キャラクターコード1の他に、143があるので歩いていない道として使います。
10 CLS:W=29:H=21:L=143 20 FORI=0TOW+1:LCI,0:?CHR$(1,28,31,L);:LCI,H+1:?CHR$(1);:NEXT:FORI=1TOH:LC0,I:?CHR$(1,L);:LCW+1,I:?CHR$(1);:NEXT 30 FORI=2TOWSTEP2:FORJ=2TOHSTEP2:LCI,J:?CHR$(1,L,28,28,31,L,L);:D=RND(4):LCI+(D=0)-(D=2),J+(D=1)-(D=3):?CHR$(1);:NEXT:NEXT
10行 準備
20行 枠描画
30行 迷路描画(棒倒し法)
W,H: 迷路の大きさ(右端ゴールの位置)
L: 歩いていない道のキャラクターコード(L=2とすると動作がよくわかります)
カーソルキーで歩いて、ゴールまでたどり着くまでくりかえし!
40 X=1:Y=1:LCW,H:?CHR$(246) 50 LCX,Y:?"o";:IFX=W&&Y=HEND 70 K=INKEY():IF!KCONTELSEA=X-(K=28)+(K=29):B=Y-(K=30)+(K=31):IFSCR(A,B)!=1?CHR$(28,0);:X=A:Y=B 80 GOTO50
以上で迷路ゲームのできあがり、合計426byte!意外とシンプルにできたので、いろいろ拡張できますね!
10行、W=11:H=11 とすると迷路生成が速くなっていろいろ改造に便利!
最小の迷路(?)は、W=5:H=5 です。
乱数列を初期化する SRNDコマンド を使うと、毎回同じ迷路が出せます。
15 SRND 1
ステージ番号を入力するようにすれば、友達と競争できますね!
15 INPUT"STAGE?",N:SRND N
タイムを計測したくなったら、CLT/TICK()を使いましょう。
45 CLT 50 LCX,Y:?"o";:IFX=W&&Y=H ?TICK():END
IchigoSoda(+IoTファームβ)を使えば、ネットから出題されるステージに対して、ハイスコアランキングも簡単!
15 N=IoT.IN():IF N=0 CONT ELSE SRND N 50 LCX,Y:?"o";:IFX=W&&Y=H N=TICK():IoT.OUT N:END
小学生の頃、好きだったMSXの投稿ゲーム「Monochrome Venus by TEIJIRO」(レビュー)のように敵を登場させて、RPG風に仕上げるのもきっと楽しいですよ。
古典ゲームとIoT、ネット対戦、モーター・センサーとの組み合わせ、新しい展開見えるかも!?