前回、Gameクラス ASP.NET Coreでクラッシュローラーをつくる(1)の続きです。

Rollerクラス

先に比較的簡単なRollerクラスを示します。

XとYはローラーの座標でInitXとInitYは初期状態のローラーの座標です。

前述のRollerクラスを継承して縦方向のみと横方向のみに移動できるローラーを生成するためのクラスを定義します。xxEndプロパティは移動できるXY座標の最大値と最小値です。

Enemyクラス

次にEnemyクラスを示します。

Positionクラス

まず座標を管理するためのPositionクラスを示します。

フィールド変数とプロパティ

次にEnemyクラスの本体を示します。

と書くべきところを

と省略して書きます。

最初にフィールド変数とプロパティを示します。

初期化

コンストラクタを示します。

移動方向の取得

次に移動させるための処理をおこないます。ここではプレイヤーの位置から移動する方向を決める、実際に移動させるという2段階で処理をおこないます。

以下は敵が移動する方向を取得するためのメソッドです。ふたつの橋をそれぞれとおる場合と通らない場合でプレイヤーにたどりつくための最短コストを取得することで最終的な最短経路を取得しています。

敵がプレイヤーがいる位置にたどり着くための最短経路を取得するための処理を示します。

挟み撃ちを仕掛けるために2体の敵のうち、一方は右側と下側から、他方には左側と上側からプレイヤーを捕まえるための最短経路を求めます。ただしプレイヤーが角にいる場合は捕まえるための最短経路が存在しない場合があるので、その場合はどの方向からも捕まえることができるようにします。

移動の処理

実際に敵を移動させる処理を示します。敵が移動方向を変更することができるのは角、十字路、丁字路にいるときです。それ以外の場所にいるときはそのまま直進します。

方向転換できる状態のときは前述のGetDirectメソッドで移動すべき方向を取得してEnemyDirectにセットします。そのあとEnemyDirectにセットされている値によって適切に敵が存在する座標を変更します。

永久パターン対策として次に敵を倒したときに加算される点数が3200点を超えた場合はローラーから逃げる動作をさせています。逃げた敵がプレイヤーがローラーから離れたとたん引き返してくるので深追いには注意が必要です。