* 初心者向けプログラミング体験ワークショップ#12
-(by [[K]], 2022.03.04)
** (0)
-今回紹介するのは、「迷路脱出ゲーム」です。42行で書けます。
-このページは[[「初心者向けプログラミング体験ワークショップ」>a21_edu01]]の教材のうちの一つです。
** (1) ストーリー & ルール
-(検討中)
----
-なお、HLXでは現在開いているゲームウィンドウよりも大きなウィンドウを開くことができません。ですから、たとえばもし「坂道を走ってきれいな石を拾い集めるゲーム」を遊んだ後にこれを実行しようとするとエラーになるはずです。その場合は、お手数ですがHLXを一度終了させて、もう一度HLXを起動して、それからmaze.txtやmaze.cをrunしてください。
** (2-1) HLX-BASICでのプログラム(42行)
-プログラム中に日本語で説明を書き込んでいますが、その部分は入力しないでください。矢印も入力しないでください。
CANVAS 47,32,"MAZE"; ← ゲーム画面を作ります。よこ47マス、たて32マスの大きさです。
INT DX[4]={ 1, -1, 0, 0 };
INT DY[4]={ 0, 0, 1, -1 };
INT DA[4];
HI=99999;
FOR;
CHARBOX@ 47,31,0,0,1,2,0; ← ここから迷路をかく処理
CHARBOX@ 47,31,0,0,1,2,0; ← ここから迷路をかく処理(穴掘り法)。
CHAR@ 1,1,0,0,0;
LOOP 1000000;
X=RND(23)*2+1;
X=RND(23)*2+1; ← 掘り始めの位置を乱数で決める。
Y=RND(15)*2+1;
IF GETCH@(X,Y)==0 THEN
IF GETCH@(X,Y)==0 THEN ← そこがあいている場所なら穴掘り開始。
FOR;
FOR I=0,4;
FOR I=0,4; ← 4方向を調査する。
DA[I]=0;
TX=X+DX[I];
TY=Y+DY[I];
IF 0<TX AND TX<46 AND 0<TY AND TY<30 THEN
IF 0<TX AND TX<46 AND 0<TY AND TY<30 THEN ← もし1マス先と2マス先が掘られていなければ DA[I]=1 にする。
DA[I]=GETCH@(TX,TY)*GETCH@(TX+DX[I],TY+DY[I]);
FI;
NEXT;
I=ARGMAXRND(DA,0,4);
IF DA[I]==0 BREAK;
LOOP 2; X+=DX[I]; Y+=DY[I]; CHAR@ X,Y,0,0,0; NEXT;
I=ARGMAXRND(DA,0,4); ← DA[I]が1の中から乱数で一つ選ぶ。
IF DA[I]==0 BREAK; ← DA[I]=1がなければ別の場所から掘りなおす。
LOOP 2; X+=DX[I]; Y+=DY[I]; CHAR@ X,Y,0,0,0; NEXT; ← 選んだ方向に2マス掘る。
NEXT;
FI;
NEXT;
X=1; Y=1; T=0; ← ここから迷路の中を歩く処理
FOR;
PRINT@ 0,31,7,0,"TIME:%5d HIGH:%5d ",T,HI;
CHAR@ X,Y,6,6,0;
IF X==45 AND Y==29 BREAK;
I=INKEY@WRC(100);
CHAR@ X,Y,0,0,0;
TX=X+XMOVE(I); ← とりあえキー入力に合わせて動いた座標を計算する。
TY=Y+YMOVE(I);
IF GETCH@(TX,TY)==0 THEN X=TX; Y=TY; FI; ← もし移動先に壁がなければ移動する。
T++; ← 時間を1増やす。
NEXT;
HI=MIN(HI,T);
WAITKEY@ 10;
NEXT;
-ほそく説明:
--PRINT@の中の%以降には、数字のゼロや小文字のdがあります。英語のオーではないので注意してくださいね。
--色番号の表
|0:黒|1:青|2:みどり|3:水色|4:赤|5:むらさき|6:黄色|7:白|
--色を2つの数字で表すときは、1つ目の数がキャラクターの色で、2つ目の数が背景の色です。
--キャラクターの表示位置は、2つの数字で表します。1つ目が左から数えて何番目のマスか(0番から数えます)、2つ目が上から数えて何番目のマスか(0番から数えます)。
---このゲームでは32x24マスを用意しているので、0,0~31,23までが使えます。
--キャラクター番号の表
|0:空白|1:四角|2:丸|3:バツ|4:よこぼう|5:たてぼう|6:顔マーク|7:ひしがた|8:ななめせん|9:ななめせん|
--RND(23)について: RNDは乱数(らんすう)の命令で、RND(23)は0~22までのどれかの数を適当に決める命令です。
** (2-2) HLX-BASICのプログラムを実行するための方法(大人の方へ)
-もしWindowsでHLX-BASICを使うなら、話は簡単です!
-[[a21_hlx003]]のページへ行って、 hlx003c.zip をダウンロードして、中にある hlx_x86_win.exe を入手してください。それだけあれば十分で他のファイルは捨ててしまってもかまいません。
-このhlx_x86_win.exeを適当なフィルだ内において、同じフォルダの中にrocket.txtというテキストファイルを作ります。このテキストファイルをお子さんに入力させてあげてください。
--入力の際にはまずテキストエディタを開き(メモ帳でもいいですが、私はTeraPadが好きです)、キーボードのCapsLockをオンにした状態で、大人がテキストを一文字ずつ読んであげて、お子さんがキーを探して入力する、というスタイルがおすすめです。大人は1とI、0とOの入力間違いが起こりやすいので、特にそこを注意してみてあげます。
--キーを見つけられないときは、ほらここにあるよと教えてあげますが、それでもキーボードのキーを指さすだけにして、実際の入力はお子さんにやらせてあげてください。入力ミスがあった時の訂正も、「矢印キーを使ってカーソルをここに動かして、そこでDelキーを押して。」みたいに操作の指示はしても、実際の操作はお子さんにやらせてみてください。
--そうすると、「これは全部自分がやった。」という満足感が得られるはずです。
--(何回もやって慣れてきたら、自分でプログラムを読んで入力できるようになると思います。)
-入力が終わったら、先ほどのhlx_x86_win.exeを起動して、そこで
hlx>run maze.txt
-と入力してください。入力ミスがなければゲームが始まるはずです。
-ミスがあった場合は、エラーメッセージを見ながら間違いを探して直してください(エラーメッセージはかなり不親切なので、大人の方の手伝いが不可欠です。よろしくお願いします。お手数をおかけしてすみません)。
-なおゲーム中のキー操作は、ゲーム画面が入力アクティブになっていないと有効ではありませんので、あれ?操作が効かないなと思ったら、ゲーム画面が一番上のウィンドウになっているかどうかをまず確認してください。
-Windows以外のOSの方は、[[a21_hlx003]]のページを見て、ソースコードからhlxをビルドしなければいけません。そこがクリアできれば、あとは同じようにできるはずです。
** (2-3) 改造のポイント
-(検討中)
** (3-1) C言語でのプログラム(aclライブラリ利用)(39行)
-内容的に、(2-1)とほぼ一対一で対応しているので、細かい説明は省略します。
-(準備中)
** (3-2) C言語のプログラムを実行するための方法(大人の方へ)
-このプログラムは、C言語でありながらHLXのサポート範囲内の機能だけで書かれているので、HLXで実行することができます。この場合、C言語やaclライブラリのインストールは不要です(もしWindows以外で、まずhlx自身のビルドからやらなければいけない場合は、Cコンパイラやaclライブラリのインストールが必要です)。
-使い方もほとんど同じで、maze.cを作って、
hlx>run maze.c
-とするだけでOKです。
-もし、HLXを使わずに普通のCコンパイラとaclライブラリの組み合わせでやる場合は、[[a21_acl01]]のページを見てaclライブラリを使えるようにしたうえで、上記のmaze.cをビルドしてください。
-そのほかの操作方法や改造方法などは、(2-2)、(2-3)と同等なのでここでは省略します。
* こめんと欄
#comment