ボスコニアンは以下のようなゲームです。

ボスコニアン – Wikipedia

1981年11月に日本のナムコから稼働されたアーケード用多方向スクロールシューティングゲーム。

8方向レバーと1ボタン(ショット)で自機を操作。自機を中心に画面が8方向へスクロールする。画面レイアウトは同社が前年に発表した『ラリーX』を踏襲し、画面右側のレーダー表示を頼りに、ステージ内に配置された敵基地を全て破壊するとステージクリアとなる。

ラリーXと異なり、レーダーの上下および左右はそれぞれ繋がっている。

敵基地は規則的に開閉するシェルターを持つ中心部と、6箇所の砲台で構成されている。レーダー上では緑色の点で表示。シェルターが開いた時に中心部を攻撃するか、砲台を全て破壊すると倒せる。これを全滅させるとラウンドクリア。

とこのようなものになっています。そのまま同じものをつくっても面白くないので前回の縦シューティングゲームのように原作にはない3Dの要素を加えます。

するとこんなゲームができました!

ではOpenTKで作成してみましょう。

まず基本的な部分です。ここでは自機や敵を移動させたり死亡判定をするUpdate()メソッドや描画をおこなうDraw()メソッド、描画するにあたってどこからどのように見たものを描画するかを決めるSetSight()メソッドを考えることになります。以下のコードはそれ以外の決まり切った部分です。

ではさっそく自機を描画して表示させてみましょう。自機はXY座標のみが変化します。

どのように描画するかですが、視点はつねに自機の進行方向に対して後ろ側とし、一定の距離を維持します。Z座標は固定の値とし、自機座標(0,0,0)のとき、視点の座標は(0,-20, 6)とします。

自機や弾丸の大きさや速度はほかのクラスからもアクセスできるように別のクラスにまとめます。

自機と敵のクラスをつくろうとすると共通した部分が多くできます。そこでこれらの基底クラスとしてCharacterクラスを作成します。

では自機クラスを作成します。

あとは表示させて動かすだけです。方向転換をする場合、1回のUpdate()メソッドごとに9°ずつ5回にわけて回転させます。