今回はスクランブルもどきをつくります。スクランブルとはこんなゲームです。

ジェット機型の宇宙船(スペースファイター)を地形や敵に衝突するのを避けながら操縦し、最終的には敵基地を破壊することがプレイヤーの目的となる。自機は前方向ショットと投下式ミサイルを装備しており、これで空中の敵や地上物を破壊できる。:引用元 スクランブル (ゲーム)

スクロール型のゲームをつくるときは敵の動きを考える必要があります。自機が移動することで背景がそれとは逆方向に移動します。すると敵の移動は敵自体の移動だけでなく背景の移動分も考える必要があるわけです。

スクランブルでいえば敵ミサイルは上方向に移動しますが、自機が移動するため見た目は斜め上方向に移動させる必要があるわけです。自機の移動速度が同じならあまり難しく考える必要はない(ミサイルは最初から斜め上に移動すると考えることも可能)ですが、自機の移動速度(背景の移動速度)が可変である場合でも対応できるようなものとしてアプリケーションを作成することにします。

まずはデザイナで以下のようなものを作成します。

フォームにメニューをつけています。中央にあるのはパネルです。

自機を表示させるためのクラスを作成します。自機の画像は動画にあったものをキャプチャさせていただきました。これを80×30ピクセルで表示させます。

パネルに何かを表示させるのであれば

としてイベントハンドラPanel1_Paint内で描画の処理をすればよいのですが、ここでJikiクラスのなかのメソッドを呼び出して描画させます。自機は常に存在するわけではありません。敵にやられれば消滅するし、ゲーム開始以前に表示されているのはおかしいです。

Jikiクラスに必要なものとして、

自機は存在するのかを示すプロパティまたはフィールド変数
自機の画像となるプロパティまたはフィールド変数
自機を表示させるメソッド
自機を移動させるメソッド

ほかにもあると思いますが、これらは最低必要であると思われます。

まだまだ不十分で追加するメソッドもありますが、とりあえずいまはこれでよいでしょう。

次にForm1クラスでの処理です。

まずメニューの[スタート]がクリックされたら自機を表示させます。そして方向キーがおされたら自機をその方向に移動させます。

これで一応動くのですが、方向キーを押したときにスムーズに移動させることができません。キーを押すと少しだけ移動してそのまましばらく押したままにしないと移動させ続けることができません。

そこでみんなの大好きなタイマーを使用します。方向キーをおすと自機の移動方向が指定され、離すとクリアされます。そして自機の移動方向が指定されているときにタイマーイベントが発生するとそのあいだその方向に移動するという例のやり方です。

Jikiクラスを以下のように変更します。

そのまえに自機の方向を管理するための列挙体を作成します。

次にJikiクラスを示します。

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