2010-07-21 76 views
2

比方說,我有這個二維數組地圖尋路二維數組

{ 0,0,0,0,7,1,1,1,1,1,1,1,1 }, 
{ 0,7,7,7,7,1,1,1,24,1,1,1,1 }, 
{ 0,7,24,24,24,24,24,24,24,1,1,3,1 }, 
{ 0,7,23,23,23,23,23,23,24,1,1,3,1 }, 
{ 0,7,24,23,23,23,23,23,23,1,1,1,1 }, 
{ 0,7,24,23,23,23,23,23,23,1,1,1,1 }, 
{ 0,7,23,23,23,23,23,23,24,1,3,1,1 }, 
{ 0,7,24,24,24,24,24,24,24,1,3,1,1 }, 
{ 0,0,0,0,1,1,1,1,1,1,1,1,1 }, 

,我有充分的HashSet定義阻止磚整數。什麼是一種好方法,當我點擊地圖的一部分時,我的球員站在那裏做一個好的尋路? A *(使用節點/ etc)?你有什麼建議?

謝謝。

+0

爲了使用A *,我建議設置被阻塞的tile爲int.MaxValue值,並且忘記任何hashset。 – nothrow 2010-07-21 15:17:24

+0

哪裏是瞭解A *的好地方?我試過谷歌。 :\ – nn2 2010-07-21 15:22:20

+1

嘗試維基百科:http://en.wikipedia.org/wiki/A*_search_algorithm 另外,移動通過一個瓷磚的成本是不同的? – tsiki 2010-07-21 15:23:55

回答

6

如果圖的大小實際上與您所描述的示例的順序相同,那麼您可以安全地使用Dijkstra's algorithm,因爲它的實現比A *更簡單一些,並且沒有真正需要啓發式算法如果你可以在幾乎同一時間做一個詳盡的搜索:)

至於你對「使用節點/ etc」的評論,這已經是一個圖,儘管是一個稍微尷尬的表示。每個數組值都是一個節點,「邊緣」由數組中的鄰接給出。被阻塞的圖塊可以通過禁止鄰接來完成(即查看被阻塞圖塊的列表以確定是否可以從當前正在考慮的另一個節點到達),或者如上面Yossarian所建議的那樣,只需將該圖塊的成本設置爲這樣大到幾乎無限大。但是,如果採用後一種方法,則需要確保這些切片永遠不會在解決方案中無意中結束!

+0

你知道嗎?這對我來說似乎有點高級。我將學習Java遊戲AI和邏輯的基礎知識。我有David Brackeen編寫的「Java開發遊戲」和Jonathan S. Harbour的「Beginning Java Game Programming Second Edition」和Andrew Davison編寫的「Java中的Killer Game Programming」。當我閱讀這些內容時,我會盡快回復您。好哇! – nn2 2010-07-21 15:35:57

+0

@丹 - 這是一個非常好的答案,你應該真的考慮它。如果你害怕圖像,只需使用一個圖形庫,如jgraph,它已經有一個Djikstra最短路徑函數 – willcodejavaforfood 2010-07-21 15:38:47

+0

我會看看jgraph。小心將我鏈接到它的網站?無法在Google上找到它,因爲這只是一個常用詞。 – nn2 2010-07-21 15:43:37