JavaScript スクランブルのようなゲームをつくる(2)の続きです。今回は更新処理と当たり判定を実装してゲームを完成させます。

更新処理

1秒間に30回更新処理をおこないます。

更新処理ではcanvas左端に描画される部分の座標をSPEEDぶん増やしますが、敵司令部を破壊しないで右端まで来てしまった場合は最終ステージの最初に戻します(違和感がないようにループさせる)。

プレイヤーの更新

プレイヤーの更新処理を示します。ボタンの押下状態によってplayerの座標を移動させます。また燃料も減らし0になったら墜落させます。

敵の更新処理

敵のミサイルを更新する処理を示します。

まず発射すべきミサイルがあるか探します。UFOとファイアボールのゾーン以外はミサイルが発射されます。条件を満たしたものがある場合は発射させます。発射されたミサイルはMissile.Update関数が呼びだされるたびに上昇していきます。

UFOの更新処理を示します。

新しいUFOを生成する必要がある場合は生成します。そのあと配列内に格納されているUFOオブジェクトを移動させます。そのあと死亡フラグがセットされているものは取り除きます。

ファイアボールの更新処理を示します。

新しいファイアボールを生成する必要がある場合は生成します。そのあと配列内に格納されているファイアボールオブジェクトを移動させます。そのあと死亡フラグがセットされているものは取り除きます。

火花を更新する処理を示します。Typeが2になったものは配列内から取り除きます。

弾丸・爆弾の更新と当たり判定

弾丸・爆弾の座標を更新したあと後述するJudgeHitEnemies関数で敵に命中しているかを調べます。そのあと死亡フラグがセットされたオブジェクトを配列から取り除いています。

当たり判定

敵に弾丸や爆弾が命中しているかを調べるJudgeHitEnemies関数を示します。

命中後の処理

爆発で発生する火花を生成する処理を示します。

敵のミサイルなどを破壊したら加点処理をおこないます。

敵司令部を破壊したらステージクリアです。5秒経過したら次のステージの先頭から再開されます。

ステージクリア後または自機死亡後の処理

ステージクリア後または自機死亡後にゲームを再開する処理を示します。

clearedフラグが立っている場合はステージ数を1増やしてcurPositionXを0にリセットします。そのあとgetObjects関数を呼び出して各オブジェクトの初期化をして燃料を満タンにします。そのあとcurPositionXから自機を復活させる場所を取得します。最後に死亡フラグをクリアします。

自機と敵の当たり判定

自機と敵の当たり判定をする処理を示します。

自機死亡時の処理

自機死亡時の処理を示します。

原作ではステージが進行すると燃費が悪くなり、敵の司令部を破壊したあと上昇しようとしても燃料が足りず墜落してしまいます。この場合はステージクリア後に死亡であれば残機は減らず、ステージクリアの処理がおこなわれます。このゲームの同様にステージクリア後に死亡であれば残機は減らず、ステージクリアの処理をおこないます。といっても燃費云々の処理はこのゲームでは実装していません(おいっ)。

ゲームオーバー時の処理

ゲームオーバー時の処理を示します。

ゲームオーバー時は3秒後にcanvas中央に’GAME OVER’という文字列を描画します。isPlayingフラグをクリアしてゲームオーバーの効果音を鳴らし、自機操作用のボタンを非表示にしてゲームスタート用のボタンを表示させます。

通常の描画処理

通常の描画をする処理を示します。

canvas全体を黒で塗りつぶし、地形、ミサイルなどの敵、自機(プレイ中で自機が生存しているときのみ)を描画します。そのあとスコア、残機、残り燃料を示すメーターを描画します。またステージクリア後はステージクリアを示す文字列を描画します。

スコアを描画する処理を示します。

残り燃料のメーターを描画する処理を示します。

ステージクリア後の文字列を描画する処理を示します。