cocos2d x遊戲例項(8) A星演算法(4)

2021-07-03 20:44:24 字數 909 閱讀 3388

繼續a星演算法,我們在經歷了地圖的檢測,並且檢測

open

列表和close

列表之後。如果還沒有被加入到

open

和close

列表中,我們就把他加入到我們的

open

列表中,方法如下:

很簡單,就是設定我們之前已經提到過的引數,然後使用堆排序排列如下:

堆排序之前已經介紹過,就是保證樹形結構的父節點的f

值比子節點的

f值小就可以了

之後我們就進入這樣的迴圈:首先把起點放入close

列表,並檢測這點周圍點的f值(

g+h,

h我們通過本點到終點的橫縱索引差估計而來),把剩下的點放入

open

列表中,並根據

f值進行堆排序,然後把

f值最小的點放入

close

列表中,繼續處理,直到找到終點為止。其實之前我們進行的就是這個步驟。

然後我們找到路徑後就通過getpath

把路徑存入到

path

陣列中就可以了

我們就是把close

列表中的節點乙個個的插入到

path

中,直到找到起始點,也就是說

g代價為

0的點就結束了。

最後作一些處理,我們的a

星演算法就完成了。

處理的**如下

首先就是將open

和close

列表清空,以便下一次使用,然後如果我們的

path

中的數量為

0時,返回空值,否則檢測

path

中有沒有終點,如果沒有加入終點並返回

path。

到此a

如有錯誤之處,希望大家多多指正

星演算法遊戲例項

cocos2d x遊戲例項(8) A星演算法(4)

繼續a星演算法,我們在經歷了地圖的檢測,並且檢測open列表和close列表之後。如果還沒有被加入到open和close列表中,我們就把他加入到我們的open列表中,方法如下 很簡單,就是設定我們之前已經提到過的引數,然後使用堆排序排列如下 堆排序之前已經介紹過,就是保證樹形結構的父節點的f值比子節...

cocos2d x遊戲例項(6) A星演算法(2)

首先函式從findpath函式開始,初始化的內容如下 首先是把當前位置和目標位置賦給我們這個類的成員變數,然後把我們的地圖變數傳入到成員變數map 中,然後分別初始化 open close path 列表,其中 path 和close 列表先為空,open 列表中為了進行堆排序時方便 堆排序時從索引...

cocos2d x遊戲例項(5) A星演算法(1)

下面我們就介紹一下a星演算法,他就是一種啟發性的演算法,根據現在到達這個位置的步數及之後的 估計步數 即f g h,f是整個從起點到終點的代價,g是從起點到我們目前位置的步數,h是從目前位置到終點的估計值,注意這裡是估計值,所以我們得到解並不一定是最好的解,具體解 好 到什麼程度呢?就是要根據h的估...