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

2021-07-03 20:42:19 字數 998 閱讀 9521

首先函式從findpath函式開始,初始化的內容如下

首先是把當前位置和目標位置賦給我們這個類的成員變數,然後把我們的地圖變數傳入到成員變數map

中,然後分別初始化

open

,close

,path

列表,其中

path

和close

列表先為空,

open

列表中為了進行堆排序時方便(堆排序時從索引

0開始時,索引乘二還是

0,所以這樣會造成不便)。然後把起點加入到

open

列表中,這裡涉及到

geth

的估計函式,因為到起點的代價是

0,從起點到終點的估計函式

geth

如下:我們選取的這個估計函式比較簡單,就是分別算從本點到目標點的橫縱索引值,並把它乘以10

,我們把臨近格之間的代價定為

10,那麼對角線的代價就是14(

10*根號

2)。繼續回到findpath中,我們開始真正的搜尋了

我們遍歷open

列表中的元素,首先通過

fromopentoclose

()函式把

open

列表中的第乙個元素(第

0個元素無效,前文已經說過了)刪除並把他加入到

close

列表中。

fromopentoclose

函式如下

首先從open

中把第乙個元素並把它加入到

close

函式中,然後在

removefromopen

函式中把

open

列表中的第乙個函式換成

open

中的最後乙個函式,底下進行一下堆排序,這裡簡單說一下堆排序,就是把整個的陣列看成是乙個樹形結構,然後保證父節點比子節點的

f值小即可,這樣一來,第乙個元素就是最好的

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

星演算法遊戲例項

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

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

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

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

cocos2d x遊戲例項(7) A星演算法(3)

然後我們獲得父節點索引,即close列表中的最後乙個元素,然後檢測該元素,是否離目標位置只差乙個點的距離,如果是的話我們就獲得了路徑,我們首先看如果沒到達目標位置時,我們進行a星搜尋的函式 在這裡,我們分別找目前位置的地圖索引值,上下左右位置,首先判斷他是否超出了地圖的位置,然後檢測該點是否是地圖中...