C# OpenTKで描画した戦車から砲弾を発射させる

の続きです。今回は敵の戦車をつくります。

敵の戦車の移動方法は2秒間前進し、そのあと自機がある方向に方向転換します。つねに正しい方向に動くことができると人間側としては対抗のしようがないので制約をつけます。

2秒間前進
方向転換をする必要性がないときも方向転換のために戦車を停車させる

それではやってみましょう。

Tankクラスを継承してEnemyTankクラスを作成します。戦車を動かすためのメソッドとしてGo()、Back()、TurnLeft()、TurnRight()メソッドを追加しています。

EnemyTankクラスのMove()で敵の戦車を移動させるのですが、2秒おきにisGoフラグを切り替えています。問題はisGo == false のときです。自分の戦車と敵の戦車の位置関係から戦車が向くべき方向を求めています。

それぞれのX座標とZ座標をもとにarctan(アークタンジェント)関数をつかって角度を求めれば簡単だと思っていたらそうではありませんでした。戦車の位置関係によって180度逆の結果が出てくることがあるので、戦車の位置関係で処理を変える必要があったのです。

戦車の方向転換が終了したら弾丸を発射します。方向転換しているときは逃げるか止まっているのを利用して砲撃しないとやられます。ただいまのところは当たり判定の処理はしていません。お互い砲撃しても弾丸は貫通するだけです。

これで敵の戦車は2秒ごとにこちらの戦車の方向に向かって移動することができるようになりました。ただし180度以上の方向転換をすると2秒以内には終わらないことがあります。これを利用すれば効果的に敵の戦車を倒せるかもしれません。