障礙圖的矩陣編輯搞定了,編輯起來非常方便,發個圖鑒賞鑒賞。

下午寫了A*算法的實現,原以為很復雜,其實也還算有點復雜
不過基本上很順利,一下午就封裝出來了
只是其效率還很不滿意,特別是要不停的創建釋放內存Open列表和Close列表操作太頻繁
我選擇了MuiltSet編制了評估路徑損耗的排序規則,set的內部樹結構,用來做這些恰到好處。
但就是對不停的創建和釋放對象這方面感覺很不滿意,或許考慮用Memory pool來解決這個問題
下面是A*算法的實現,也發出來如果你需要的話,可以拿來用用,盡管網上的例子已經有很多實現了
每個人都有自己的風格,這么經典的算法不自己寫一遍似乎說不過去,再說將來還要改進和擴展呢
明天把寫好的算法加入到地形編輯器中去,角色就能自己去找路徑移動了。
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);
}
算法實現源碼