障礙圖的矩陣編輯搞定了,編輯起來非常方便,發(fā)個(gè)圖鑒賞鑒賞。

下午寫了A*算法的實(shí)現(xiàn),原以為很復(fù)雜,其實(shí)也還算有點(diǎn)復(fù)雜
不過基本上很順利,一下午就封裝出來了
只是其效率還很不滿意,特別是要不停的創(chuàng)建釋放內(nèi)存Open列表和Close列表操作太頻繁
我選擇了MuiltSet編制了評(píng)估路徑損耗的排序規(guī)則,set的內(nèi)部樹結(jié)構(gòu),用來做這些恰到好處。
但就是對(duì)不停的創(chuàng)建和釋放對(duì)象這方面感覺很不滿意,或許考慮用Memory pool來解決這個(gè)問題
下面是A*算法的實(shí)現(xiàn),也發(fā)出來如果你需要的話,可以拿來用用,盡管網(wǎng)上的例子已經(jīng)有很多實(shí)現(xiàn)了
每個(gè)人都有自己的風(fēng)格,這么經(jīng)典的算法不自己寫一遍似乎說不過去,再說將來還要改進(jìn)和擴(kuò)展呢
明天把寫好的算法加入到地形編輯器中去,角色就能自己去找路徑移動(dòng)了。
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 9 9 9 9 9 9 0 0 0 0 0 0
0 0 0 0 9 1 1 1 1 0 9 0 0 0 0 0
0 0 0 0 9 1 0 0 0 1 0 9 9 0 0 0
0 0 0 0 9 1 0 0 0 0 1 1 9 0 0 0
0 0 0 0 9 1 0 0 0 0 0 1 9 0 0 0
0 0 0 9 0 1 0 0 0 0 0 1 9 0 0 0
0 0 9 0 1 0 0 0 0 0 0 1 9 0 0 0
0 9 0 1 0 0 9 9 0 0 1 0 9 0 0 0
0 9 1 0 0 0 9 1 1 0 1 9 0 0 0 0
0 9 1 0 0 0 9 9 0 1 1 9 0 0 0 0
0 9 1 0 0 0 0 0 9 0 1 9 0 0 0 0
9 0 1 0 0 0 0 0 0 9 9 9 0 0 0 0
AStar astar;
vector<PathPoint> path;
//astar.FindPath(buf8x8, 8, 8, PathPoint(7, 0), PathPoint(7, 7), path, true);
astar.FindPath(buf16x16, 16, 16, PathPoint(15, 0), PathPoint(11, 7), path, true);
for(DWORD i = 0; i < path.size(); i ++)
{
printf("%d %d \r\n", path[i].i, path[i].j);
}
算法實(shí)現(xiàn)源碼