前回はJavaScriptでおみくじアプリをつくりました。今回はもぐら叩きをつくります。

前回との共通点は絶対配置(position: absolute;)とz-indexを使うことです。

ではさっそくはじめましょう。

まずもくらの素材を仕入れます。これとかどうでしょうか?

モグライラスト – No: 805158/無料イラストなら「イラストAC」

HTML部分

最初はこんな感じで配置します。全部黒だとわかりにくいのでモグラを隠す帯の部分は別の色にしています。

するとこのようになります。

つぎに適切にz-indexを指定して帯の向こう側にもぐらを隠します。

これでもぐらを土のなかに隠すことができます。

それからゲームを開始するためのボタンやゲームの結果を表示する部分の座標も設定しておきましょう。

するとこんな感じになります。

JavaScript部分

次にモグラを移動させる処理をJavaScriptで書きます。

グローバル変数

app.js

まず各DOM要素を変数に格納します。

baseYsはもぐらの初期のY座標、moYsはそのときのもぐらのY座標、moveUpsはもぐらの移動方向が上かどうかのフラグです。

もぐらは全部で30体、これまでの出現数、叩くことができた数、ミス(モグラ以外の部分を叩いてしまった場合)の数、見逃してしまった数を格納する変数を定義します。また30体目のもぐらがでてきて消滅したらゲーム終了です。isFinishingフラグは30体目のもぐらが出現したときにtrueになります。isFinishingがtrueのとき、すべてのモグラが初期座標にいるのであればゲーム終了であり、isPlayingフラグをfalseにします。

効果音を鳴らします。finishSound1はドラムロールの音です。しばらくしたら「ジャン!」という音(finishSound2)とともに結果を表示します。

ミス判定

モグラ以外の部分がクリックされたらミスとして処理をします。そのためにイベントリスナを定義します。

ここではmissCountをインクリメントするとともに効果音を鳴らしています。

当たり判定

モグラの部分がクリックされたらポイントを追加します。このときクリックイベントがそのむこうがわに伝搬しては困るのでe.stopPropagation()を実行しています。

叩かれたモグラは土のなかに姿を消すようにしたいので、Y座標には初期座標を設定して移動方向は下にしています。モグラは初期座標より下には移動しないので動作を止めることができます。

モグラを叩いたときはhitCountをインクリメントして効果音を鳴らします。

ゲーム開始の処理

スタートボタンがクリックされたときの処理を示します。ゲーム中はボタンを非表示にします。念のためisPlayingがtrueかどうかも確認してtrueのときはなにもしません。またクリックイベントが伝搬しないように止めています。

ゲームが開始されたらisPlayingフラグはtrueに、isFinishingフラグはfalseにするとともに、ヒット数、ミス、見逃しの回数を0にリセットします。ボタンとゲーム結果を非表示にします。

モグラを動かすためにMoveMogura1とMoveMogura2のふたつの関数を呼び出しています。MoveMogura1はモグラを出現させるための関数で、MoveMogura2は出現したモグラを最初は上に、そのあと下に移動させる関数です。

出現させる関数

モグラを出現させる関数を示します。

乱数を発生させて、該当するモグラを上に移動するフラグをtrueにしています。ただしフラグがtrueになるのはY座標が初期座標のものだけです(現在移動中のものを二重に移動しない)。

モグラを出現させたらその総数をカウントしてmaxCountと一致するかこれを超えたらタイマーを停止します。そしてisFinishingフラグをtrueにします。

モグラを動かす&ゲーム終了時の処理

出現したモグラを移動する関数を示します。

最初は上に移動します。初期座標と比較して36以上上に移動したら下に移動させます。もとの位置まで下がってきたら動かなくなります。

isFinishingがtrueのときはこれ以上モグラは出現しません。このあとすべてのモグラが初期座標に戻ったらゲーム終了です。タイマーを停止させて isPlayingフラグをfalseにします。そのあと0.5秒待機した後ドラムロールの音を流します。そのあとゲームの結果を表示させ、スタートボタンも再表示させます。