今回はJavaScriptで音ゲーをつくります。音ゲーなのでアイドルらしい気の利いた音楽を鳴らしてみたいものです。無料で使える音源はないか調べてみたところ、以下がありました。

目指せ!KIRAKIRAアイドル! @ フリーBGM DOVA-SYNDROME OFFICIAL YouTube CHANNEL

これをつかって以下のような音ゲーをつくります。下の四角い部分をクリックまたはタップしたらHitまたはMiss、クリックできずに通り過ぎてしまった場合はThroughと表示させます。最後に成績を表示します。

HTML部分

style.css

グローバル変数と定数

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

index.js

描画処理

canvasをクリアする処理を示します。

各レーンを描画する処理を示します。

ヒットしたとき該当レーンに’HIT’と表示する処理を示します。

見逃したときにしたとき該当レーンに’Miss’と表示する処理を示します。’HIT’の文字と重ならないようにY座標を少し下にします。

間違えてタップしたとき該当レーンに’Miss’と表示する処理を示します。見逃しと扱いを変えたいのでY座標だけでなく表示色も変えます。

ヒット時の処理を示します。hitCountをインクリメントして効果音を再生します。またレーンの番号を配列hitLaneNumbersに格納し、0.5秒後に取り除きます。

ミス時の処理を示します。missCountをインクリメントして効果音を再生します。またレーンの番号を配列missLaneNumbersに格納し、0.5秒後に取り除きます。

見逃し時の処理を示します。throughCountをインクリメントし、レーンの番号を配列throughLaneNumbersに格納し、0.5秒後に取り除きます。

Blockクラスの定義

上から落ちてくるブロックに関する処理をおこなうためにBlockクラスを定義します。

コンストラクタの第二引数は上から落ちてくるときにどれだけ遅れてくるかを示すものです。

ページが読み込まれたときの処理

ページが読み込まれたときの処理を示します。canvasのサイズを調整し、レーンを描画します。また各レーンのボタンを適切な位置に移動させるとともにイベントリスナーを追加します。

各レーンのボタンを適切な位置に移動させる処理を示します。定数で定義されている値をセットしているだけです。

イベントリスナーを追加する処理を示します。

STARTボタンがクリックされたらgameStart関数を呼びだしてゲームを開始します。また各レーンのボタンをタップしたらヒットした場合はonHit関数と、ミスタップの場合はonMiss関数を呼び出します。

更新処理

タイマー処理の部分を示します。

現在プレイ中でない場合は何もしません。更新時はブロックの落下速度を少しずつ上げていきます。ブロックのUpdate関数とDraw関数を呼び出して移動と描画の処理をおこないます。そのあとhitLaneNumbers、throughLaneNumbers、missLaneNumbersに値が格納されているときは’Hit’、’Miss’の文字を表示させます。またcanvasの上部にスコアを表示させます。

ゲーム開始時の処理

ゲーム開始時の処理を示します。

ゲーム開始されたらisPlayingフラグをセットします。上から落ちてくるブロックをランダムに生成し、スコアをリセットします。BGMを再生して開始ボタンを非表示にします。

BGMの終了近くになったら以降は新しいブロックを落とさないようにして、BGMの再生が終わったらisPlayingフラグをクリアして更新処理を停止します。そして結果を表示します。

終了時の処理

ドラムロールを鳴らす処理を示します。

結果を表示する処理を示します。結果はHit、Through、Missの3行で渡されるので、改行で分割して一番横幅が広いThroughの行の描画幅を調べます。あとはこれをcanvasの中央付近に描画します。この関数が実行されるときはタイマー処理は停止しているので1回実行すればcanvas上から文字列が消えることはありません。

またゲームが終了しているので再挑戦できるようにスタートボタンを再表示させます。