タワーディフェンスゲームを書いていて、チュートリアルなどからA *パスファインディングアルゴリズムを実装していますが、まだコード化できない状況に遭遇しました。下の図を検討してください。シアンのノードはこれまでに見つかった最短経路を表し、紫のノードは検査されたノードを表し、濃い灰色のノードは壁を表します。
私がA*アルゴリズムについて知っていることから、以下の状況のパスを計算するために、それは...
- 「開始」から開始し、上位ノードが使用可能かどうかを確認します。です。GスコアとHスコアを計算します。右、下、左のノードでも同じことをします。
- 右側のノードのFスコアが最も低いことを検出します(F = G + H)。次に、手順1と同じ方法を繰り返して次のノードを見つけ、「開始」ノードを親としてマークします。
- このパターンを継続し、「Cトラップ」の中央にあるノードに到達します。これは、このノードのFスコアがこれまでで最も低いためです。
- 上部、右側、下部、および左側のノードがすべて閉じていることを検出します。次に、A *はこのノードを閉じたものとしてマークし、このノードをそのままにしておくことを理解して、最初からやり直します。
#4の直後はどうなりますか? A *は、新しく閉じられたノードをスキップして、同じパスに沿ってGスコアとHスコアを再検査しますか?また、このSWFを使用してこのシナリオを描画すると、ここで提案されているように、トラップを補うためにより多くのノードが検出されたことを示します。なんで?