レーダースコープは1980年に任天堂が開発したシューティングゲームです。3Dっぽいギャラクシアンのようなゲームです。敵はときどき機雷を投下してきてこれを打ち漏らすと下にある自分の基地がダメージをうけます。ただ敵を撃つだけではなく自分の基地も守らないといけない・・・というゲームです。

こちらは本物のレーダースコープのプレイ動画。

ただこのゲーム、技術的に優れていたけどあまり売れなかったそうです。なぜでしょうか? 基地がダメージをうけると自機の動きが遅くなるという仕様になっているのですが、自機が死亡して次に自機が登場すると前機のときにうけた基地のダメージも回復してしまい、あまり基地を守るという緊張感がないということではないでしょうか?

その後大量に余ったこのゲームを利用してドンキーコングが作られたのはゲーム通のあいだでは有名な話です。

それでは前置きはこの程度にしてさっそくつくっていきましょう。

3Dっぽさを出すためにOpenTKを使う

3Dっぽい仕様なのでOpenTKを使います。OpenTK.GLControlを継承して以下のようなクラスを作成します。

最後のChangeBackColorメソッドは第二引数で指定したミリ秒のあいだ背景を変更するためのメソッドです。自機がやられたときに背景をチカチカさせるための処理でつかいます。

上記を作成するとデザイナのツールボックスからフォーム上にドラッグアンドドロップすることができるので以下のように配置します。上にあるのはLabelでスコアと残機表示用、下にあるのはPictureBoxでダメージメーター表示用です。

ゲームで使う変数(自機や敵機の位置や状態)を扱うクラスとしてGameManagerクラスを作ります。どこからでもアクセスできるように静的クラスにします。

自機を作成する

それでは自機を作成して表示させます。

GameCharacterクラスをつくる

そのまえに自機や敵機を描画するときに必要なテクスチャを取得するためのクラスをつくります。これを継承して自機を描画するためのJikiクラスをつくります。

Jikiクラスをつくる

つぎにJikiクラスを作成します。GetBitmapsメソッドのなかで使用しているProperties.Resources.sprite2は以下のファイルをリソースに追加して使います。

自機を操作できるようにする

方向キーを押したら自機を操作できるようにするためにForm1クラスとGameManagerクラスに以下を追加します。

方向キーを押しているときだけMoveLeftとMoveRightがtrueになります。そのときにForm1クラスでTimer.Tickイベントが発生したらGameManager.Updateメソッドを呼び出して自機を移動させます。

移動させたら描画の処理をおこないます。自機を描画するまえに縦横の直線を破線で描画してレーダースコープっぽくします。

Form1クラスではイベントハンドラTimer_Tick内でGameManager.Updateメソッドを呼び出してデータを更新して再描画をさせる処理を追加します。またキーが押されたらGameManager.MoveLeftとGameManager.MoveRightをtrueにして離されたらfalseにします。