ボスコニアンのようなオンライン対戦ゲームをつくる(1)の続きです。敵の動作を実装します。

Enemyクラスの定義

敵を移動させたり描画するためにEnemyクラスを定義します。

以降は名前空間の部分は省略して書きます。

コンストラクタとプロパティ

コンストラクタと各プロパティを示します。

オブジェクトが生成されたら弾丸オブジェクトを32個生成して以降はこれを使い回します。

初期化の処理

敵を初期化する処理を示します。ゲームが開始されたときや敵が撃墜されたときは敵を初期化します。敵をランダムな位置に配置してX方向とY方向にそれぞれ{ -2, -1, 1, 2 }のなかからどれかを選んで初速を与えます。そしてIsJustBornフラグをセットします。これは3秒後にクリアします。IsJustBornフラグがセットされているあいだは当たり判定の対象から除外されます。

移動の処理

敵を移動させる処理を示します。座標を速度ぶん移動させます。フィールドの端から外に出た場合は反対側にワープさせます。そのあと発射された弾丸の移動処理も行ないます。

未使用の弾丸を取得する

弾丸を発射するときは_bulletsに格納されているものを使い回すのですが、新たに発射されるものはすでに発射されフィールド上に存在するものとは別のものでなければなりません。GetNewBulletメソッドは未使用の弾丸を返します。

Cannonクラスの定義

ボスコニアンに出てくる敵の要塞は中心にコアがあり、周囲に6つの砲台があります。先に本体部分ではなく砲台部分にあたるCannonクラスを定義します。

砲台に番号をつけます。要塞のすべての砲台から一斉に弾丸が発射されては困るので、番号によって時間差をつけることができるようにします。

Fortressクラスの定義

要塞の本体部分であるFortressクラスを定義します。

以降は名前空間の部分を省略して書きます。

コンストラクタとプロパティ

コンストラクタと各プロパティを示します。

弾丸と砲台に関しては他のクラスと同様に最初に生成したものを使い回します。

初期化と更新処理

要塞を初期化する処理を示します。

乱数で要塞をフィールド上にランダムに配置します。また中心部分の座標が決まれば6つの砲台の座標も決まります。このとき砲台の死亡フラグをクリアします。

要塞が初期化されたら、3秒間当たり判定の対象から外します。

更新処理を示します。ここではUpdateCountをインクリメントしているだけです。またGetNewBulletメソッドは_bulletのなかからフィールド上に存在しない未使用の弾丸オブジェクトを返します。