きほんのおいかけゲーム
ゲームを作るときの基本パターンっぽいものを作ってみました。
矢印キーで移動。画面の端に行くと反対側にワープします。
一定周期ごとに出る宝「*」を取ると得点になります。
敵「K」は、自分「M」を追いかけてきます。つかまるとゲームオーバーです。
自分がプログラムを始めたとき、いろいろ悩んだことを思い出して、書いてみました。
このプログラムをいろいろいじって(書き替えて)みてください。新しい発見があると思います。
いじったプログラムをKidspod;に投稿してくてたらうれしいです。
【説明です】
10 'キホン ノ オイカケ ケ゛ーム
20 CLS 'ゲームを始める前に、画面の文字を全部消します
行番号30から90までは、ゲームを始めるときに1回だけ使う設定です。
XとYを自分の位置を示すために使います。
30 X=10 '自分の横位置です
40 Y=10 '自分のたて位置です
ZとVを敵の位置を示すために使います。
50 Z=30 '敵の横位置です
60 V=20 '敵のたて位置です
そのほかのゲーム内で使う値(変数)の初期値を設定します。(変数の初期値は0なので、設定しなくてもいいです。)
70 T=0 '敵の動きを遅くするために使います
80 U=0 '宝を追加するタイミングに使います
90 S=0 '得点です。最初は0点です。
100 'シ゛フ゛ン ヲ ウコ゛カシマス
110 LOCATE X,Y:PRINT " "; 'これから自分を動かすので、その前に自分の表示を消します。
120 IF BTN(LEFT)=1 THEN X=X-1 'もし、左ボタン(レフト)が押されているならば、自分の横位置を1減らします。つまり左に動きます。
130 IF BTN(RIGHT)=1 THEN X=X+1 'もし、右ボタン(ライト)が押されているならば、自分の横位置を1増やします。つまり右に動きます。
140 IF BTN(UP)=1 THEN Y=Y-1 'もし、上ボタン(アップ)が押されているならば、自分のたて位置を1減らします。つまり上に動きます。
150 IF BTN(DOWN)=1 THEN Y=Y+1 'もし、下ボタン(ダウン)が押されているならば、自分のたて位置を1増やします。つまり下に動きます。
ここからワープ処理です。
160 IF X<1 THEN X=30 '自分が左端に来たら、右端に移動させます
170 IF X>30 THEN X=1 '自分が右端に来たら、左端に移動させます
180 IF Y<1 THEN Y=22 '自分がいちばん上に来たら、下の端に移動させます
190 IF Y>22 THEN Y=1 '自分がいちばん下に来たら、上の端に移動させます
宝を取ったか判断します。
200 IF SCR(X,Y)=ASC("*") THEN BEEP:S=S+10:LOCATE 0,23:PRINT "SCORE ";S;
'画面の自分の位置を調べます。宝の文字「*」があったら、下の3つの事をします。
・音を鳴らす
・得点(S)に10点足す
・画面の左下にSCORE(得点)を表示する
210 LOCATE X,Y:PRINT "M"; '横がX、たてがYの位置に自分を「M」の文字で表示します。
敵を動かします。敵が自分と同じ速さで動くと敵の動きが速すぎなので、3分の1の速さにします
220 '3カイ ニ イチト゛、テキ ヲ ウコ゛カシマス
230 T=T+1 '敵の動くタイミングを決める値(T)を1増やします。
240 IF T<3 THEN GOTO 330 'Tが3より小さいならば、敵を動かす処理(行番号250から310)を飛ばして行番号330に行きます。
250 LOCATE Z,V:PRINT " "; 'これから敵を動かすので、その前に敵の表示を消します。
ここから敵が自分を追いかけるところです。
自分と敵の横位置どうしを比べます。
260 IF X<Z THEN Z=Z-1 '自分の値が敵の値より小さいならば、敵の横位置を1減らします。つまり、敵は左に動きます。
270 IF X>Z THEN Z=Z+1 '自分の値が敵の値より大きいならば、敵の横位置を1増やします。つまり、敵は右に動きます。
自分と敵のたて位置どうしを比べます。
280 IF Y<V THEN V=V-1 '自分の値が敵の値より小さいならば、敵のたて位置を1減らします。つまり、敵は上に動きます。
290 IF Y>V THEN V=V+1 '自分の値が敵の値より大きいならば、敵のたて位置を1増やします。つまり、敵は下に動きます。
300 LOCATE Z,V:PRINT "K"; '横がZ、たてがVの位置に敵を「K」の文字で表示します。
310 T=0 '敵の動くタイミングを決める値(T)を0に戻します。
320 '50カイ ニ イチト゛タカラ ヲ ヒョウシ゛シマス
330 U=U+1 '宝を表示するタイミングを決める値(U)を1増やします。
340 IF U<50 THEN GOTO 380 'Uが50より小さいならば、宝を表示する処理(行番号350と360)を飛ばして行番号380に行きます。
350 LOCATE RND(30)+1,RND(22)+1:PRINT "*" '宝をランダムな場所(横位置 1から30, たて位置 1から22のどこか)に表示します。
360 U=0 '宝を表示するタイミングを決める値(U)を0に戻します。
370 'テキ ニ ツカマッタ?
380 IF X=Z AND Y=V THEN GOTO 410 '自分と敵の横位置とたて位置が同じならば、自分と敵が重なったということです。その場合、行番号410に行きます。
390 GOTO 110 '行番号110からの処理を繰り返します。
400 'ケ゛ームオーハ゛ー
410 LOCATE 11,10:PRINT "GAME OVER" 'ゲームオーバーを表示します。
420 END '終了します。プログラムの最後なので書かなくてもいいです。
(2019/06/06 IchigoJam BASIC 1.2.3と1.3.1で動作確認済)