こんな感じのゲームをつくります。サンタクロースがモンスターにプレゼント箱を投げつけて倒すゲームです。

通常のシューティングゲームとは違って弾丸に相当するプレゼント箱が放物線を描いて飛びます。地面に接触すると消えてしまいます。敵をかわすときはジャンプするしかありません。またジャンプすることで上空の敵を攻撃することもできるようになります。また難易度調整のためにジャンプ中でも左右の移動ができるようにしています。

HTML部分

HTML部分を示します。

style.css

グローバル変数と定数

JavaScript部分を示します。最初にグローバル変数と定数を示します。

index.js

Charcterクラスの定義

更新と描画のためにクラスを定義します。

まずは他のクラスの基底クラスとなるCharcterクラスを定義します(当たり判定の処理をするときにCharcterクラス同士だとわかりやすいかもしれないので)。

index.js

Playerクラスの定義

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

初期化

コンストラクタを示します。

Init関数は初期化(死亡状態からの復活)をするためのものです。

移動と更新

Move関数は左右の移動を開始するとき、Stop関数は左右の移動を停止するときに呼び出されます。

Update関数は更新処理をおこないます。MovingDirectが空文字列でない場合は左右に移動させます。またUpdateCountAfterJumpが-1でない場合はジャンプしたあとなので上下の移動処理もおこないます。

ジャンプと投擲処理

ジャンプを開始する処理とプレゼント箱を投擲する処理を示します。

Presentクラスの定義

プレゼント箱の更新と描画のためにPresentクラスを定義します。

コンストラクタの引数はプレゼント箱の初期座標です。初速は定数で定義されているので、コンストラクタ内でセットします。

Enemy1クラスの定義

敵は2種類あります。地上をまっすぐ移動する敵の更新と描画をするためにEnemy1クラスを定義します。

Enemy2クラスの定義

空中をフワフワ移動する敵の更新と描画をするためにEnemy2クラスを定義します。

EnemyBombクラスの定義

空中の敵が投下した爆弾を更新し描画するためにEnemyBombクラスを定義します。

Holeクラスの定義

地面のところどころに開いている穴を更新し描画するためにHoleクラスを定義します。

当たり判定は矩形でおこないますが、描画はそれよりも幅が広いV字の谷とします。

Sparkクラスの定義

爆発によって発生した火花の更新と描画をするためにSparkクラスを定義します。これはCharcterクラスを継承していません(理由は火花は当たり判定の対象ではないから)。

続きは次回とします。