4

私は Java の友達と一緒に小さなタワーディフェンスゲームを作っています。今、私はタワーのロジックを割り当てられており、現時点では、ターゲットのモンスターを狙って攻撃するためにタワーがどのように回転する必要があるかを理解しようとしています. モンスターはタワーが回転して射撃している間に移動するため、将来の位置を狙う必要があります。モンスターの位置をいつでも t で表す関数と、モンスターに向けるのに必要な角度を小さくする関数を実装しましたが、3 つの未知の変数があるため混乱しています。

  • t1 or angle: タワーが回転する必要がある時間または角度 (タワーが回転できる速度が与えられます)
  • t2 または 発射距離: 弾丸がターゲットに命中するまでに移動する必要がある時間 (速度も与えられ、一定)。
  • t3 または移動距離: モンスターが同時に移動する距離。

だから私は次の解決策を探しています:

min(t1+t2) = min(t3)

対象のモンスターがまだタワーの範囲内にいる場合。必要な最大ターンと最大可能範囲を計算してから段階的に減少させることはすでに考えていましたが、「完璧な」非ヒューリスティックな解決策があるかどうか知りたいですか?

4

2 に答える 2

4

すべての座標について、その位置に弾丸が必要な時間t Bを計算できます。これは、ターン時間に弾丸が必要とする時間 ( t 1 + t 2 ) を加えたものです。

モンスターを攻撃できる最も早い時期は、モンスターと弾丸が致命的に遭遇するモンスター (予測) パスの最初の場所です。

モンスターの位置から始めて、獣の時間と位置を計算し、弾丸が早く到着するか遅く到着するかを計算します。

今すぐ発砲すればモンスターを殺すことができるかどうか、すべての角度または目盛りをオンにしてチェックするだけで、変数の1つを排除できます。1 つの交点を持つ 2 つのベクトル (照準、モンスターの移動方向) があり、モンスターと弾丸がそこで同時に出会うかどうか (交点までの距離、速度) をテストするだけです。

于 2011-09-19T10:56:22.047 に答える
3

追加情報:

与えられたモンスターがタワーまでの距離Dを持ち、タワーへの最短経路を移動し、タワーがモンスターの方に向きを変え始めると仮定します。これがの状況t=0です。

修正されたタイプミス:

タワーが角速度で回転する場合omega、つまり、phi時間での角度t

phi = omega * t

したがって、タワーが角度を変えなければならないことがわかっている場合phi、弾丸はで撃たれます

t = phi/omega

これから弾丸の速度vが移動した距離は

s(t) = v * (t-phi/omega)

モンスターが速度で動く場合、モンスターはvm遠くにありますd

d(t) = D - vm * t

弾丸がモンスターに当たった場合

s(t) = d(t)

この方程式は簡単に解くことができます。次の式を取得するために、用語を置き換えて再配置するd(t)だけです。s(t)t

t = (D + v * phi/omega) / (phi/omega + vm)

そして、弾丸はs(t)この瞬間に移動したでしょう。この値が負の場合、モンスターは速すぎて、弾丸が発射される前に塔に到達しました

于 2011-09-19T11:04:27.983 に答える