スカッシュ・ゲームを作ろう その2(1/2) |
ボールの処理等を追加して完成させます。
1.プログラム実行時の初期設定
2.ゲームスタート時の初期設定
3.ボールの移動
4.バーとボールの当たり判定
5.ボールを落とした時の処理
6.画面の更新
7.ゲームオーバー処理
1.プログラム実行時の初期設定 |
プログラム実行時の初期設定に以下を追加します。
;仮想画面に絵を読み込む celload "graphics\\ball.bmp", 2 ;効果音を読み込む mmload "sound\\tm2_pon000.wav", 0 ;打ち返し音 mmload "sound\\tm2_pon001.wav", 1 ;はねかえり音 mmload "sound\\tm2_quiz003bad.wav", 2 ;ボールを落とした音 randomize
celload "graphics\\ball.bmp", 2
"ball.bmp"をウィンドウIDが2番の仮想画面に読み込みます。"ball.bmp"はボールの画像で、大きさは16×16です。
mmload "ファイル名", 音番号(0以上)
音のファイルをハードディスクからメモリに読み込むとともに、その音に指定した番号をつけます。
音を鳴らすには
mmplay 音番号
とします。
ただし、今説明したようになるのは2MB以下のWAVファイルのみで、それ以外の音声ファイルはmmload時にはファイル名が登録されるだけで、mmplay時に読み込まれます。つまり、音を鳴らそうとした途端に読み込みのためにプログラムが止まってしまいます。サンプルプログラムの3つの音はいずれも2MB以下のWAVファイルです。
2.ゲームスタート時の初期設定 |
ゲームスタート時の初期設定に以下を追加します。
;ボールの座標 ball_x = rnd(625) ball_y = -16 ;ボールの速度 ball_pmx = rnd(2) * 2 - 1 ball_pmy = 1 ball_speed = 4 fall_f = 0 score = 0 hit_cnt = 0
;ボールの座標 ball_x = rnd(625) ball_y = -16
ボールの座標をball_x、ball_yに入れます。ゲームスタートと同時にボールを出しますが、x座標は0以上624(= 640 - 16)以下の値からランダムに決めます。y座標は画面の外側、上端よりボールの高さだけ上の位置とします。
;ボールの速度 ball_pmx = rnd(2) * 2 - 1 ball_pmy = 1 ball_speed = 4
ball_pmxは、x方向のプラス方向(右)に動くなら1、マイナス方向(左)に動くなら-1を入れます(pmはplus minusの略)。ball_pmyも同様で、y方向のプラス方向(下)に動くなら1、マイナス方向(上)に動くなら-1を入れます。
例えば、ball_pmxが1でball_pmyが1の時は右斜め下に動きます。
ball_speedは一度にx方向、y方向に何ドット動かすかを入れます。すると、x方向に一度に動く量(ball_xに加算する数)はball_pmx * ball_speedとなります。y方向も同様です。
初期値は、ball_pmxは-1か1かをランダムに決めます。rnd(2) * 2が0か2ですから、rnd(2) * 2 - 1は-1か1になります。
ball_pmyは、最初は必ず下方向なので1です。
ball_speedは4とします。
fall_f = 0
ボールを落した(画面下端からはみ出した)かどうかのフラグです。落としていない時には0、落とした時には1を入れます。
score = 0
スコアを入れます。ゲームスタート時は0点です。
hit_cnt = 0
ボールを打ち返した回数を入れます(cntはcountの略)。このように何かの数を数えるものをカウンタと言います。
3.ボールの移動 |
3.以降はメイン・ループに追加します。
;ボールの移動 ball_x += ball_pmx * ball_speed ball_y += ball_pmy * ball_speed if ball_x <= 0 { ball_x = 0 ball_pmx = 1 mmplay 1 } if ball_x >= 624 { ball_x = 624 ball_pmx = -1 mmplay 1 } if ball_pmy == -1 & ball_y <= 0 { ball_y = 0 ball_pmy = 1 mmplay 1 }
ボールの移動は
ball_x += ball_pmx * ball_speed ball_y += ball_pmy * ball_speed
となります。
if ball_x <= 0 { ball_x = 0 ball_pmx = 1 mmplay 1 }
ball_xが0の時、ボールが画面左端に当たったということです。はね返すには、ball_pmxを1に(右向きに)します。また、mmplay 1ではねかえり音を鳴らします。
ただし、ball_pmx * ball_speedを加算した結果ball_xが0にはならず画面左端よりはみ出すこともあります。そこで、バーの移動の時と同じ考え方で、その場合は強制的にball_xを0にします。
画面右端、上端に当たった時の処理も同様です。
ただし、上端に当たった場合については注意してください。
if ball_y <= 0 {
これだと、ゲームスタート時にボールを出した時にも、この条件にあてはまってしまいます。そこで、ボールが下から上に向かっている時のみはねかえり処理を行います。
if ball_pmy == -1 & ball_y <= 0 {