今回は対戦型のラリーエックスをつくります。

ラリーエックスは、1980年11月にナムコ (後のバンダイナムコアミューズメント) から稼働されたアーケード用固定画面アクションゲームです。青い車(マイカー)を操作して追ってくるレッドカーや岩を避けながら、迷路状のステージ上にある旗で示された10箇所のチェックポイントを通過するのが目的です。

仕様

ASP.NET Core版 対戦型で対戦型のゲームにできないかということで以下のようなゲームをつくります。


青、赤、緑の3つの車を複数台つくる。
青は赤から逃げないといけないが緑は体当たりして破壊できる。
赤は緑から逃げないといけないが青は体当たりして破壊できる。
緑は青から逃げないといけないが赤は体当たりして破壊できる。
追尾を振り切るために煙幕を使用できるが、煙幕は天敵にしか効果を発揮しない。
岩は設置しない。
レーダーに各プレイヤーの位置と旗の位置を表示する。
すべての旗を通過すればステージクリア。
旗を通過したときの得点は100点、同じステージでノーミスで連続で通過することで200点、300点とアップしていく。
燃料が切れたら速度が半減する。

ではさっそく作成していきましょう。名前空間はRallyXとします。

クラスの定義

各キャラクタの位置を格納するクラスを定義します。

迷路のなかのプレイヤーが通過できない部分を位置を格納するクラスを定義します。

迷路上のフラッグの位置と通過、未通過の情報を格納するクラスを定義します。

スモークスクリーン(煙幕)の位置と消滅までの時間を格納するクラスを定義します。

プレイヤーが撃破されたときに飛ぶ火花の位置と消滅するまでの時間を格納するクラスを定義します。ボンバーマンとペンゴで使ったものとだいたい同じです。オリジナル性を出すため、派手に爆発させます。

迷路の初期化

次に迷路を初期化します。迷路をつくるためのテキストファイルを作成してリソースに追加しておきます。ここからダウンロードできます。#がある位置が壁で、R、G、B、r、g、bがプレイヤーの初期位置です。

ゲームに関する処理をおこなうRallyXGameクラスを定義します。

以降は名前空間部分は省略して書きます。

初期化の処理を示します。

壁の追加

ステージに壁を追加する処理とこれに関係するプロパティを示します。

車の初期位置を取得する

プレイヤーには強弱関係があるので色別にわけておきます。

GetCarPositionsメソッドは上記のテキストファイルからプレイヤーの初期位置を取得し、上記プロパティに格納します。

フラッグを初期化する

Flagsプロパティは未通過のフラッグの位置のリストを返します。InitFlagsメソッドはテキストファイルのFが書かれている位置にフラッグをセットします。

Smokesプロパティは煙幕のリストを返します。