地形をつくる

ゲーム・スクランブルでは地形があります。最初にでてくる地形はこんな感じ。山あり谷ありで地上部分にはミサイルや燃料タンクが設置されています。地上構造物は後回しにして地形(の一部)だけ作成します。

幅は45ブロックで高さは15ブロックです。

それではこれを利用してみましょう。

□は空白部分、■は地面、▲は登りの傾斜、△は下りの傾斜がある部分とします。サイズは20ピクセルとします。

Topographyクラスの作成

地形を描画するためのクラスを作成します。

まずはコンストラクタから。

ブロックの大きさは20×20ピクセルです。地形を表現するための文字列をフィールド変数として用意します。これをforeach文で処理するのでリストに変換します。これをするために作成したのがGetListTopography()メソッドです。

あとはこれをForm1クラスのイベントハンドラPanel1_Paint内で処理できるようにするだけです。Topography.Show(Graphics g)メソッドで表示させます。▲なら上り坂、△なら下り坂です。

ところでこれを描画しようとすると画面がチラチラします。そこでダブルバッファを使用したいのですが、DoubleBufferedプロパティはProtectedなので外部からは設定できません。そこでPanelを継承してPanelExクラスを作成します。これによってForm1クラスが若干変更されます。

まず、継承され新しく作成されたPanelExクラスです。

Form1クラスのコンストラクタでPanelExとTimerを初期設定をしています。

初期設定の内容ですが、フォームのサイズを変更すればPanelExのサイズも自動で変更できるようにしました。それから背景を黒にして、Paintイベントが発生した場合はイベントハンドラPanelEx1_Paintが呼び出されるようにしています。

一方、タイマーはIntervalプロパティを50に設定してTickイベントに対してイベントハンドラTimer_Tickが呼び出されるようにしています。

ではイベントハンドラではどのような処理をしているのでしょうか?

Jiki.Showメソッドを呼び出すことで、自機を表示させる必要がある場合は表示されるようにすると同時に、地形も表示させることができるようにしています。

一応、これで地形が表示されるようになったのですが、動きません。これではゲームにならないので、次回は自機を移動させることで地形が前から後ろに移動してみえるようにします。