這里: * G = 從起點A,沿著產(chǎn)生的路徑,移動到網(wǎng)格上指定方格的移動耗費。 * H = 從網(wǎng)格上那個方格移動到終點B的預(yù)估移動耗費。這經(jīng)常被稱為啟發(fā)式的,可能會讓你有點迷惑。這樣叫的原因是因為它只是個猜測。我們沒辦法事先知道路徑的長度,因為路上可能存在各種障礙(墻,水,等等)。雖然本文只提供了一種計算H的方法,但是你可以在網(wǎng)上找到很多其他的方法。
1,把起始格添加到開啟列表。 2,重復(fù)如下的工作: a) 尋找開啟列表中F值最低的格子。我們稱它為當(dāng)前格。 b) 把它切換到關(guān)閉列表。 c) 對相鄰的8格中的每一個? * 如果它不可通過或者已經(jīng)在關(guān)閉列表中,略過它。反之如下。 * 如果它不在開啟列表中,把它添加進去。把當(dāng)前格作為這一格的父節(jié)點。記錄這一格的F,G,和H值。 * 如果它已經(jīng)在開啟列表中,用G值為參考檢查新的路徑是否更好。更低的G值意味著更好的路徑。如果是這樣,就把這一格的父節(jié)點改成當(dāng)前格,并且重新計算這一格的G和F值。如果你保持你的開啟列表按F值排序,改變之后你可能需要重新對開啟列表排序。
有幾種方法來解決這個問題。當(dāng)計算路徑的時候可以對改變方向的格子施加不利影響,對G值增加額外的數(shù)值。也可以換種方法,你可以在路徑計算完之后沿著它跑一遍,找那些用相鄰格替換會讓路徑看起來更平滑的地方。想知道完整的結(jié)果,查看Toward More Realistic Pathfinding,一篇(免費,但是需要注冊)Marco Pinter發(fā)表在Gamasutra.com的文章