C#でゲームをつくろう!

ということでゲームをつくってみることにします。検索してみるとインベーダーゲームの作成方法を解説しているサイトはたくさんありますが、ギャラクシアンをつくっているページはそんなにないので、これをつくることにします。

どうやって作るか?

どうやって作るか? ピクチャーボックスに敵キャラや自機を描画してこれを移動させるという極めて安易な方法でやってみることにします。

敵キャラや自機、弾丸はピクチャーボックスを使う
タイマーをつかってこれらを移動させる
あたり判定をして得点加算やミス時の処理をおこなう

デザイナで以下のようなものをつくります。

敵は複数なのでイメージをコピーしてつくります。

自機を移動させる

操作方法は←→キーとスペースキー、Sキーをつかいます。矢印キーで左右の操作、スペースキーで弾丸を発射します。ゲームスタートは「S」キーを使います。これはformのKeyDownイベントを使えば簡単にできそうです。

一応、これでも動くのですが、これだとキーを押し続けたときに最初に少しだけ動き、そのあとしばらくして連続で動くという変な動き方になります。

改善策として「左のキーが押されている」「右のキーが押されている」「どちらも押されていない」という状態を保存するフィールド変数を用意します。タイマーをつかって現在どの状態なのか調べて動かすようにします。

ゲームがスタートするときにタイマーをStartさせます。Tickイベントが起きたら

これでうまく自機が動くようになりました。

自機から弾丸を発射させる

スペースキーを押すと自機から弾丸が発射されるようにします。発射された弾丸は上昇していきます。

まず自機から弾丸を発射させるメソッドを完成させます。

弾丸は自機の上部中心から発射されます。そこで上部中心の座標をもとめます。

centerXが弾丸の中心になるようにする必要があります。弾丸のサイズを決めてしまいましょう。

これで弾丸は自機の向こう側に表示されます(自機を移動させてみるとわかる)。これでは発射されたというよりパネルのうえに置かれただけなので、上昇させる方法を考えます。

弾丸を上昇させる

弾丸は単発ではなく複数発射されます。そこでリストに格納してまとめて処理してしまいましょう。

画面上まで上昇した弾丸は必要ないのでDisposeしてしまいます。またプロパティの処理でDisposeされた弾丸はリストのなかから排除しています。

最後にTimer1_TickにBulletsMoveを追加します。

これで自機から発射された弾丸は上昇できるようになりました。めでたしめでたし。続きは次回。