爆発の処理

爆発の処理を行うのが関数bakuhatsu()です。まずゲーム中でなければ爆発の処理を行わないようにします。次に爆発の回数を示す変数bakCountから1を引きます。爆発パターンは2つしか用意してありませんので、交互に表示することで爆発っぽく見せています。交互に爆発パターンの画像を差し替えるために「bakCount & 1」として0か1を求めています。この&はビット演算を行う論理積(AND)です。論理積の場合、双方のビットが1の時は1になりますが、それ以外は0になります。実際にどういう結果になるのかを以下の表に示します。

10進数 2進数(ビットパターン) 1と論理積をとった場合の結果
0 0000 0
1 0001 1
2 0010 0
3 0011 1
4 0100 0
5 0101 1
6 0110 0
7 0111 1
8 1000 0
9 1001 1
10 1010 0

結果を見ると綺麗に0と1が交互に繰り返されるのが分かります。あとは、0の場合の画像と1の場合の画像を表示すればよいことになります。ただし、if()を使って条件判断をおこなうのは面倒なので、あらかじめ「0.gif」「1.gif」という名前の画像を用意しておきます。論理積「bakCount & 1」に対応したURLを生成し爆発画像のURLとします。

爆発し終わったら爆発パターンを見えない位置に設定します。ここではY座標を-100として完全に爆発画像を見えないようにしています。また、爆発処理が完了したので爆発中であることを示す変数bakFlagにfalseを入れます。

爆発パターンは2つの画像が交互に表示される

コード05

        function bakuhatsu(){
            if (!bakFlag) return;   // ゲーム中でなければ以後の処理を行わない
            bakCount--; // 爆発時間を示すカウンタを減らす
            var num = bakCount & 1; // 0または1にする
            document.getElementById("bak").src = "images/bak"+num+".gif";
            if (bakCount < 0 ){
                document.getElementById("bak").style.top = -100;
                bakFlag = false;
            }
        }