完成
★を少しずつ増やす
★が一気に200個も飛んできたのではゲームになりません。
最初は3つくらいにしておいて、徐々に増えるようにしてみましょう。
表示される“数”が“変”わるので、新たに変数を用意します。
;フォントの設定
font "MS ゴシック", 32
;表示される星の数
star_num = 3*メインループ
redraw 0
【メモ】
変数名は何でもいいのですが、何かの数(個数)を表す変数は「○○num」という名前にすることが多いです。
numはナンバーの略ですね。
別に従わなくてもいいのですが、いつか他人が作ったプログラムを見る機会があった場合、
こういったルールを知っていると、コメントが書いてなくても何をする変数なのかわかりやすくなります。
次に、★の表示や移動を200回ずつ繰り返していましたが、これをstar_num回に修正します。
;星の移動
repeat star_num
star_x(cnt) -= star_speed(cnt)
loop;
星の表示
color 255, 255, 0
repeat star_num
pos star_x(cnt), star_y(cnt)
mes "★"
loop
;★が左端に出た
repeat star_num
if(star_x(cnt) < -32){
star_x(cnt) = 800 ;ふたたび右端へ
star_y(cnt) = rnd(480-32) ;高さはランダム
star_speed(cnt) = rnd(5) + 2 ;速度もランダム
}
loop
;自機と★の衝突判定
repeat star_num
if((star_x(cnt) > player_x – 20) and ・・・・・・・・・・
end ;プログラム終了
}
これで実行すると、★が3個だけ飛んでくると思います。
次に、★を増やします。
★が左端までたどり着いたら1個増えるようにしましょう。
star_numを+1すればいいだけです。
;★が左端に出た
repeat star_num
if(star_x(cnt) < -32){
star_x(cnt) = 800 ;ふたたび右端へ
star_y(cnt) = rnd(480-32) ;高さはランダム
star_speed(cnt) = rnd(5) + 2 ;速度もランダム
star_num = star_num + 1 ;星を1個増やす
}
loop
実行してみてください。
これで、ほぼ完成です。
【メモ】
どんどん★が増えていって200個を超えるとプログラムは停止します。
配列を200個分しか用意してないからですね
しかし、私のキーボードさばきではどう頑張っても200個を超えることはなかったので、問題ないと思います。
もし、200個を超えてしまう可能性がある場合は、配列の個数をもっと増やす必要があります。
結果表示
★と接触したら、下図のような結果表示をしたいと思います
このウィンドウは「ダイアログボックス」と呼ばれるものです。
よくパソコンを使っていると、
「○○しますか?」と表示されて「はい」「いいえ」のボタンがあって…
っていうのを見かけますよね?
あれです。
ダイアログボックスを表示するには、次のように書きます。
dialog "タイトル", 種類, "表示内容"
種類は、「OKボタンだけ」とか「“はい”“いいえ”ボタンがある」とか選べます。
詳しくはヘルプ(F1キー)を見てください 。
今回はOKボタンだけでいいので、種類は0番になります。
タイトルは「"終了"」という文字。文字は""で囲むのを忘れないでください。
表示内容は「"★の数=" + star_num」となります。
文字の足し算ができるんでしたよね?
では、★と接触した時の処理に追加しましょう。
repeat star_num
if((star_x(cnt) > player_x – 20) and ・・・・・・・
dialog "★の数=" + star_num, 0, "終了"
end ;プログラム終了
}
loop
これで、★と接触した瞬間ダイアログが表示されます。
ダイアログが表示されると、
ダイアログ上のボタンが押されるまでプログラムは停止します。
ボタンが押されると、続きから再開しますが、
今回の場合は次の行に「end」と書いてあるので、
OKボタンを押したらプログラムが終了します。
移動制限
これで、完成!!
・・・と思っていたんですが、プレイしてみたら大事なことを忘れていました。
今のままだと自機を画面外まで移動できちゃいますね。
これじゃ無敵ですw
自機の移動範囲を画面内に限定しましょう。
そんなに難しい話じゃありません。
たとえば、player_xが0より小さくなったら、
画面左にはみ出しているということですよね?
その場合はplayer_xを無理やり0にしてやります。
これで、画面左端からそれ以上左に移動できなくなります。
ということを、上下左右の4方向に適用してやればいいわけです。
;自機移動
(一部省略)
;自機の移動制限
if(player_x < 0){ ;左端にはみ出た
player_x = 0
}
if(player_y < 0){ ;上にはみ出た
player_y = 0
}
if(player_x > 800 – 32){ ;右端にはみ出た
player_x = 800 – 32
}
if(player_y > 480 – 32){ ;下にはみ出た
player_y = 480 – 32
}
;星の移動
repeat star_num
右と下の時は32(自機のサイズ)を引くのを気を付けてください。
player_xとplayer_yが自機の左上を指しているからですね。
よくわからない場合は「-32」の部分を消してみてください。
ちなみに、この処理をどこに書くかはそんなに重要じゃありません。
自機の移動に関わることなんで、その直後に書くのが自然かな~
くらいの考えでOK。
今回のポイント
-
ダイアログボックスを表示するには
「dialog "タイトル", 種類, "表示内容"」と書く。