隕石がタップされた時の処理
最後に隕石がタップされた時の処理について説明します。最初にゲーム中でなければ処理を継続しないようにします。これはゲームオーバーとなった後に隕石をタップすることを防ぐためです。スコアは隕石のY座標を加算します。これにより、隕石をより都市に近い部分でタップすれば高得点になります。高得点を得るにはリスクが伴うというわけです。
隕石がタップされたら爆発処理を行うための変数bakFlag、bakX、bakYを設定します。bakFlagは爆発を示すフラグでtrueを設定すると爆発処理が行われます。bakX, bakYは爆発表示の座標で、タップされた隕石と同じ座標を設定します。隕石が破壊されたので、新たなる隕石を出現させます。新しい隕石の生成はstartMeteo()
関数を呼び出します。
隕石がタップされるたびにゲームの難易度を上げていきます。ゲームの難易度は変数gameRankでカウントします。1つ破壊するごとに1加算し、8個破壊したら隕石の出現数を1つ増やします。
8個破壊したかどうかを調べるのに「if ((gameRank & 7) == 0)」
として判断しています。&
は先ほど説明したように論理積を示しています。& 7
とすると以下の表のように0~7までの範囲の値に収めることができます。
10進数 | 2進数 (ビットパターン) | 7と論理積をとった場合の結果()内は10進数で示した場合 | |
---|---|---|---|
0 | 0000 | 0000 | (0) |
1 | 0001 | 0001 | (1) |
2 | 0010 | 0010 | (2) |
3 | 0011 | 0011 | (3) |
4 | 0100 | 0100 | (4) |
5 | 0101 | 0101 | (5) |
6 | 0110 | 0110 | (6) |
7 | 0111 | 0111 | (7) |
8 | 1000 | 0000 | (0) |
9 | 1001 | 0001 | (1) |
10 | 1010 | 0010 | (2) |
11 | 1011 | 0011 | (3) |
12 | 1100 | 0100 | (4) |
13 | 1101 | 0101 | (5) |
14 | 1110 | 0110 | (6) |
15 | 1111 | 0111 | (7) |
コード06
function hit(n){
if (!gameFlag) return; // ゲーム中でなければ以後の処理を行わない
score = score + Math.floor(my[n]); // スコアを加算する
document.getElementById("dispSC").innerText = "Score "+score;
bakFlag = true; // trueとし爆発中であることを示す
bakCount = 10; // 爆発される時間(カウント)
bakX = mx[n]; // 爆発画像の横位置は現在の隕石の位置と同じ
bakY = my[n]; // 爆発画像の縦位置は現在の隕石の位置と同じ
document.getElementById("bak").style.left = bakX;
document.getElementById("bak").style.top = bakY;
startMeteo(n); // 新たな隕石を出現させる
gameRank++; // ゲームの難易度を上げる
if ((gameRank & 7) == 0){ // 8個破壊するごとに、一度に表示される隕石の数を増やす
cnt++;
if (cnt > 10) cnt = 10; // 隕石の最大表示数を超えないようにする
startMeteo(cnt); // 新たな隕石を出現させる
}
}