繼續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。
如有錯誤之處,希望大家多多指正
cocos2d x遊戲例項(8) A星演算法(4)
繼續a星演算法,我們在經歷了地圖的檢測,並且檢測 open 列表和close 列表之後。如果還沒有被加入到 open 和close 列表中,我們就把他加入到我們的 open 列表中,方法如下 很簡單,就是設定我們之前已經提到過的引數,然後使用堆排序排列如下 堆排序之前已經介紹過,就是保證樹形結構的父...
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的估...