ASP.NET Coreで戦車の対戦ゲームをつくります。以前、戦車をつかった対戦型ではないゲームをつくりました。

3Dのタンクバタリアンっぽいゲーム

今回は似たような感じでオンラインで対戦できるゲームをつくります。

大雑把な仕様は以下のとおりです。

複数人でプレイするのでマップを広くする
壁は砲撃で破壊できる
外周の壁は破壊できない
撃破されたら外周の壁がある位置をランダムに選んでそこで復活する
残機制。残機ゼロになったらゲームオーバー
プレイできるのは最大7。それに満たない場合はNPC(non player character)を充てる
プレイしているユーザーがゼロになったら破壊された壁はすべて復元される

ではさっそくつくってみましょう。

TankGame名前空間

このゲームで使用するクラスはTankGame名前空間で定義します。

WallクラスとPositionクラス

まず壁の位置と破壊されているかを管理するためのクラスを定義します。また戦車の位置を管理するためのクラスも定義します。

壁の位置の定義

次に初期状態で配置されている壁の位置を定義します。これは tank-map.txt に0と1で書かれています。1は壁がある部分、0はない部分です。これをリソースに追加しておきます。プロジェクト名はZeroにしているのでZero.Properties.Resources.tank_mapとすれば文字列を読み出すことができます。

tank-map.txt

ひとつひとつの壁は戦車の半分の大きさです。したがってひとつの「1」がある部分には4つの壁が存在します。壁は砲撃されると砲撃された側の壁がふたつ破壊されます。そのためひとつの「1」がある部分にある壁をすべて破壊するには最低2回、最大3回の砲撃が必要です。

Gameクラス

次にGameクラスを定義します。ここでおこなわれる処理は壁の初期化です。

以下は生成された壁のリストを返すメソッドです。