今回はボス敵をつくります。大型で少々の命中弾では死にません。

ボス敵の動きは左右にうごきます。そして表示されるY座標は視点のY座標と同じように増えていきます。そのため加速していない自機と相対速度は同じです。ボスにはザコ敵とは比べものにならないくらい派手に弾丸を発射してほしいのですが、この処理は次回おこないます。

以下のようなクラスを作成します。EnemyBaseクラスを継承しています。Move()メソッドが実行されるたびに左または右に0.1移動するのですが、そのとき右に移動するのか左に移動するかを決めるフィールド変数を持たせます。またX座標の範囲は-3より大きく3より小さくします。移動できる限界点に到達したら移動方向を逆にします。

ザコ敵と自機のZ座標は0にしているのですが、ボスは大きいのでZ座標を0にしてしまうと、フィールドに描画されている直線との関係で違和感があります。そこでZ座標は +2 とします。

それからプログラミング講座 第33回【シューティングゲーム作成(13)弾幕/JavaScript】と同様、ボスは画面の上部から下りてくるようにしてあらわれます。動画では黄色いひよこをつかっていますが、こちらでは青いサングラスをしたひよこを使います。こっちのほうがボスらしく見えませんか?

またボスが下りてくる間は双方、攻撃はできません。

ではForm1クラスにボスを描画するための機能を追加します。

ゲームが進行してBaseYが一定の値(今回は500とする)まで増加すると、ザコ敵をつくるのをやめます。そして現在存在するザコ敵が撃墜されるか描画対象領域からいなくなったらボスを出現させます。

ボスのLifeが0になったらボスを爆発させて消滅させる必要がありますが、それだけだと死んだはずのボスが何回も繰り返し出現することになるので現在対ボス戦なのかどうかを示すフィールド変数をつくります。

ボスが出現するのは

BaseYが一定の値を超えている
まだ対ボス戦ははじまっていない

という2つの条件を満たすときです。ボスが死ぬときはボスらしく激しく大爆発してもらい、爆発がおさまったらBaseYを0にリセットして次のステージに進むようにします。

次にボスの移動ですが、ボスのオブジェクトもEnemiesのなかに格納されているのでMoveEnemies()を普通に呼び出すだけでうごきます。

自機の弾丸に命中した敵がみつかったら、それはボスなのかどうか調べます。そしてボスのときはOnBurretHitBoss(Boss boss, JikiBurret burret)メソッドを呼び出します。ボスの死亡判定もこのなかでおこないます。ボスの死亡が確認されたらボスらしく激しく爆発して消えてもらいましょう。

そのあと現在対ボス戦なのかどうかを示すフィールド変数をfalseにしてステージの開始位置に自機と視点を戻すのですが、爆発処理が終わるより先にこの処理をしてしまうと爆発の様子が描画されないので、ボス死亡のあと少しインターバルを置いて以下の処理をおこなっています。

ではボスを攻撃するときの処理をみてみましょう。

ボスを爆発させるメソッドを示します。通常の大爆発はX方向とY方向に広がるのですが、それだとあまり大きな爆発には見えないのでX方向とZ方向に広がるようにしています。また広がりも大きくするためにExplosionクラスを継承して新しく作成したExplosion2クラスを使います。

Explosion2クラスを示します。より大きな爆発に見えるように描画される時間を基底クラスの2倍にしています。爆発はX軸方向とZ軸方向に広がります。