npc尋路也是個老生常談的話題了,但是一說到npc尋路,可能就有人迷茫了:哥們兒你說的尋路是什麼意思?怎麼個尋法?舉個例子好不好?尋路這個詞是遊戲開發中專用的,對映到大家課本上學到的知識點,就是圖(資料結構中的圖結構)中兩點之間的路徑。這個路徑不是特指最短路徑,但它就專門指的就是圖中兩點之間的路徑。
1、npc有聰明也有笨的,聰明的npc在玩家放大招的冷卻時間內會找到乙個最短路徑直衝玩家去攻擊。乙個有心計的npc就門繞到玩家後面去包抄或者偷襲,而膽小的npc就到處亂跑亂跳了。下面圖示表示我能想到的尋路方式。
比如上面的綠色繞行路線和紅色繞行路線。這個時候無視之前我們定義的圖的節點的鄰接點的組合。把圖**現的這幾個點看成相鄰節點來找最短路徑,這個需要重新為這個npc定義乙個鄰接表了。鄰接表就是表示相鄰兩個節點的列表。我們定義幾條類似於綠色和紅色的可以繞行到目標後面的數個路徑,在鄰接表表示的圖中,這些路徑是通的。比如綠色和紅色的這條線,包括類似的一些可以繞到目標後面的一些路徑。根據需求,鄰接表是可以動態修改的,修改後需要重新計算路徑。
4、實現。熱氣球來了,馬上就能上天!
以上尋路設計的基礎都是最短路徑演算法。為什麼要最短路徑?答:因為不管你怎麼走,到最後的目標都是要找到乙個目的地,最後一步總是要來個最短路徑演算法的,所以這個最短路徑的演算法是基礎了。
接第三步來的,我們把繞行簡化一下有心機的npc的走法。首先它在一定單位內是走s形狀的路線的。
對角線是綠色的線。每一步走乙個對角,但是每乙個對角有分成了三個小步,這三小步怎麼走就隨意了,現在我們求這個綠色的對角線連線起來的路徑。演算法的原理是最短路徑演算法,地傑斯特拉最短路徑。在定義鄰接表時候,斜對角為日字的定義為相鄰連通節點即可。具體演算法如下,可以找這條綠色的通往目標的路徑。然後再補充兩個綠色節點之間的路徑就可以啦!**如下:
using system;
using system.collections.generic;
using system.linq;
using system.text;
namespace shortpathtest
;map[i, j] = e;
pointsinmap.add(e);
}
}for (int i = 0; i < tablewidth * tablewidth; i++)
else
else if (math.abs(posx_1 - posx_2) == 2 && math.abs(posy_1 - posy_2) == 1)
else}}
}//尋找路點
int pointstartindex = tablewidth * x1 + y1;
dictionarydist = new dictionary();
dictionary> path = new dictionary>();
for (int i = 0; i < tablewidth * tablewidth; i++)
}lists = new list();
s.add(pointsinmap[pointstartindex]);
for (int t = 0; t <= tablewidth * tablewidth - 1; t++)
}if (min == int.maxvalue) break;
s.add(pointsinmap[k]);
for (int i = 0; i < tablewidth * tablewidth; i++)}}
foreach (int k in path.keys)
console.writeline(str);}}
return retvalue;}}
}
尋路演算法之A
最近接觸到moba multiplayer online battle arena 這個新名詞,發現npc尋路有點意思。於是回顧了一下經典的a 演算法。open列表 記錄可用來被尋找的點 closed列表 記錄排除在路線之外的點 對於路線中的乙個點 3.1 g值 從開始到此點的移動量 3.2 h值 ...
A 尋路演算法優化方法
a 尋路演算法是遊戲開發中使用得比較多的尋路演算法,主要用在rgp遊戲中主角或者怪物的尋路,其尋路的效率也是比較高,但是如果乙個地圖比較大或者怪物比較多的時候,同時使用尋路演算法會導致遊戲出現卡頓現象,在大部分遊戲中,角色或者怪物尋路,並不需要找最短的那條路徑,在效能允許的情況下,找一條次優或者其它...
js演算法之尋路
演算法流程說明 說明 起始節點記作s,目標節點記作e,對於任意節點p,從s到當前節點p的總移動消耗記作gp,節點p到目標e的曼哈頓距離記作hp,從節點p到相鄰節點n的移動消耗記作dpn,用於優先順序排序的值f n 記作fp 選擇起始節點s和目標節點e,將 s,0 節點,節點f n 值 放入openl...