UFOを出現させる

UFOを出現させます。これは本家スクランブルの動画です。

UFOが出現する地形クラスを作成する

UFOが出現する地形は洞窟のような場所で下だけでなく上に天井のようなものがあります。また地上にミサイルも設置されていますが、発射されることはありません。

TopographyUFOクラスはTopographyクラスを継承しています。違いは地形をつくるためのフィールド変数が違うだけです。

Form1クラスではTopographyUFOクラスのインスタンスを生成してUFO出現時の地形を描画できるようにします。

UFOクラスを作成する

次にUFOを表示したり移動させるためのUFOクラスを作成します。

プロパティ

Bitmap
UFOのビットマップです。

X
Y
UFOが存在する場所の座標です。

Line
UFOの初期位置(地形を構成するブロック単位で指定)です。

HeightMax
HeightMin
UFOが存在できるY座標の最大値と最小値です。

DeadRectangle
UFOの当たり判定のために必要な矩形を返します。

Tick
UFOが生成されて以降のTickイベントの回数です。

IsDead
UFOが撃墜されたかどうかを示します。

Move()
Draw(Graphics g)

UFOは同じ場所を上下に移動します。自機が移動することでだんだん自機の方向に近づいてきます。

コンストラクタの第二引数はUFOが存在する地形の場所です。引数のheightMaxとheightMinは上下に移動するときの上限と下限です。ここでHeightMax、HeightMin、Lineプロパティの値が決まります。乱数をつかってTickプロパティの値も決まります。

UFOの動きは三角関数を利用しています。Sin、Cosの引数はUFOオブジェクトが生成されてから経過したTickイベントの回数を加工して使っています。またUFOのY座標が同じにならないように乱数をつかって初期値を分散させています(コンストラクタを参照)。

ミサイル同様、スクロールされて左側から外に出たUFOはIsDeadプロパティをtrueにして描画対象から外します。

それ以外のプロパティはときに説明することはありません。

ゲームが始まったらミサイルの初期化と同時にUFOの初期化もおこないます。

Tickイベントが発生したらUFOを動かし、自機から発射された弾丸との当たり判定をおこないます。

自機とUFOの当たり判定をするメソッドを示します。

PanelEx1_Paintハンドラが呼び出されたら撃墜されていないUFOを描画します。