敵の動作を考えるEnemyThinkクラス

今回は敵の動作を考えます。そのために敵の行動を考えるEnemyThinkクラスを作成します。そしてEnemyMethodメソッド内でEnemyThink.Thinkメソッドを呼び出して敵がとる次の行動を考えます。

EnemyThinkクラスのThinkメソッドは敵が太陽に近い位置にいる場合は回避行動をとらせ、そうでない場合は自機がいる方向に回頭させます。

太陽に背を向ける角度とは?

まず太陽に吸い込まれては負けなので太陽の近くにいるときはそこから脱出するための処理を考えます。

太陽に対しては自分の背を向けるのが理想なのでその角度を求めます。

GetCorrectionAngleメソッドは現在の角度と理想の角度の差を返します。

太陽と充分離れているか?

AvoidCollisionWithSunIfNeedメソッドは太陽との距離が200以内であれば、太陽から遠ざかるための処理をおこないます。またその際に自機を攻撃可能であれば攻撃します。

太陽と充分離れている場合はなにも行なわずにfalseを返します。

自機を攻撃可能であれば攻撃させる

CanAttackメソッドは自機を攻撃することが可能かどうかを調べて結果を返します。自機との距離が400より小さく角度のずれも30度より小さければtrueを返します。

自機がいる方向に回頭させる

もし太陽から離れた場所であるなら自機を攻撃するために移動させます。ただしその通過点に太陽がある場合はそのまま追いかけることはできません。そこでそのまま追いかけても安全であるなら追いかけ、そうでないなら方向転換をするだけにとどめます。

IsSafeAngleForSunメソッドは引数の角度が太陽に対して安全な角度かどうかを返します。太陽に対して左右60度以上のズレがあれば安全であると判断します。

TurnTowardsJikiメソッドは自機がいる方向に回頭する処理をおこないます。

太陽に対して安全な角度であれば加速させます。ただどこまでも加速してはゲームにならないので上限を設けています。また常に加速するわけではなく確率は2分の1です。太陽に対して安全な角度ではない場合は回頭するだけで加速はしません。ただし敵機が完全に停止した状態ではやはりゲームにならないので一定の速度までは加速させます。また攻撃可能であれば弾丸を発射させます。