レーザーと敵との接触判定

レーザーが敵と接触したかどうかの判定はブロック崩しと全く同じ方式です。レーザーの座標値が敵の座標内かどうかを調べます。敵に接触した場合には敵を消去した後、スコアを加算しレーザーを再度発射します(関数startLaser()を呼び出します)。敵を1つ倒すごとにカウンタを増やし敵の合計数と比較します。全ての敵を倒したら再度、敵を生成します(関数drawEnemy()を呼び出します)。

レーザーと敵が接触した場合、敵を消しレーザーを再発射する

コード05

        function hitEnemy(){
            for(var i=0; i<total; i++){ // 敵の数だけ繰り返す
                if (!enemyFlag[i]) continue;    // 敵がいない場合は繰り返しの先頭に戻る
                if ( ((laserX + laserW) >= enemyX[i]) && (laserX <= (enemyX[i] + enemyW)) && 
                    ((laserY + laserH) >= enemyY[i]) && (laserY <= (enemyY[i] + enemyH)) ) {    // レーザーが敵に当たった
                        enemyFlag[i] = false;   // 敵を消す
                        document.getElementById("enemy"+i).style.visibility = "hidden"; // 敵の表示も消す
                        startLaser();
                        score = score + 1;  // スコアを加算
                        document.getElementById("score").innerHTML = score+"点";
                        count++;    // カウンタを増やす
                        if (count == total){    // 全ての敵を消した
                            drawEnemy();    // 再度敵を描画しゲームを継続する
                        }
                }
            }
        }