対策ですが私もすぐには思いつきませんので、他の識者の方にお任せしますごめんなさいね。3年前レーザーの当たり判定のときに使った三点を与えるとその三点間の角度を返してくれる関数ありますよね?それに「ショットの進行方向の延長上の1点(ショットがこのまままっすぐ飛ぶとたどり着く点)」と「ショットの現在位置」と「標的の現在位置」を与えるとショットが今向いている方角と敵のいる角度の差が出ます。あとはそれを適当な数字で割って現在のショットの角度に足してあげるといい感じの動きになります。角度の最小値?角度ではありません。私が出した結果で、dis=とあるのは点と点との距離(distance)を示しています。角度はang=で示しています。最初の一行目は距離が367.7で、61行目で距離が1.8になり、目標に一番近づいた、ということです。そこまでは想定した通りの動きですよね。62行目以降はあなたが言われた通り、角度が目標に向かわず180度前後から動かず、しかも距離がどんどん大きくなっている。