めでたくブログ1000回更新を達成したので前回紹介したCanvas Confettiを使ってゲームをつくることにします。敵を倒すと紙吹雪が舞い、敵弾に当たると汚物がブチまけられるという文字通りのク○ゲーです。

HTML部分

最初にHTML部分を示します。canvasにゲームのキャラクターと紙吹雪を同時に描画しようとするとうまくいかないのでcanvasを2つ生成して重ね合わせています。

style.css

グローバル変数と定数

グローバル変数と定数を示します。

Playerクラスの定義

プレイヤーの状態を更新し描画するためにPlayerクラスを定義します。

ゲーム開始時にプレイヤーの状態を初期化する処理を示します。

プレイヤーの座標を初期位置に移動します。同時にLifeを最大値にして死亡フラグのクリアし、スコアをリセットする処理をおこないます。

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

ボタンが押下されていたらその方向に自機の座標を移動させます。このときフィールドの外に出てしまわないように条件分岐で処理をします。

描画する処理を示します。

弾丸を発射する処理を示します。無限に連射できないように(0.25秒以上あける)AllowShotがtrueの場合しか発射処理はしないようにしています。発射処理をするときはPlayerBulletオブジェクトを生成してplayerBulletsに格納しています。

PlayerBulletクラスの定義

自機から発射された弾丸の状態を更新し描画するためにPlayerBulletクラスを定義します。

敵クラスの定義

次に敵クラスを定義します。

JavaScript 編隊攻撃を実装するのコードを少し変えて複数のタイプの敵を生成できるようにします。最初に基底クラスとなるEnemyBaseクラスを示します。

Enemy0クラスの定義

タイプ0の敵は急接近してきてそのあと上方に撤収するタイプの敵です。コンストラクタの第一引数で最初に出現するX座標を設定します。この値で下降時の方向が左下か右下になるかが決まります。

Enemy1クラスの定義

タイプ1の敵はジグザグに下降してくるタイプの敵です。コンストラクタの第一引数で最初に出現するX座標ともっとも左に位置する場合のX座標を設定します。

Enemy2クラスの定義

タイプ2の敵は回転しながら下降してくるタイプの敵です。コンストラクタの第一引数で回転中心になるX座標を設定します。

EnemyBulletクラスの定義

敵弾の状態を更新し描画するためにEnemyBulletクラスを定義します。

次回は定義したクラスをつかってゲームを完成させます。