2011-11-30 58 views
1

我正在用.net構建基於短信的空間遊戲我有一臺服務器和客戶端,可以在地圖上「移動」。地圖按行業細分,每個行業都有可能連接到周圍的其他8個行業(也有對角線移動的行業)。這通過列出連接扇區的數組存儲在扇區類中。目前,所有的行業都存儲在一個列表中。發出移動命令時,將檢查連接扇區陣列,並且如果在陣列中找到所請求的扇區,則加載新的扇區。如何實現自動駕駛儀

我想要做的是實現一個自動駕駛儀功能,但對於我的生活無法弄清楚如何將其與我目前的結構拉下來。每個部門只知道它是連接部門。

有沒有人有任何建議/想法?

感謝,

回答

3

我想你想的最短路徑算法。這些部門形成一個圖表,你想找到一個通過這些部門的路線。

最簡單的方法是從船的當前位置和想要獲得的位置開始執行兩次同時寬度優先搜索。找到共享節點時,將路徑合併到每個位置的該節點,並且有路徑。

如果您有任何接近數據,您可以使用A *優化它。

1

有幾種方法可以做到這一點。你的地圖是否像空間本身一樣,你可以在哪裏四處旅行,還是更像迷宮?作爲一個空間的遊戲,我會想象地圖是

XXXX 
XXXX 
XXXX 
XXXX 

在這種情況下,你可能會使用一個二維數組來存儲地圖會更好。這將允許您通過增加X和Y直到找到目的地爲止自動駕駛。

但是,如果您的地圖比較複雜,則應該調查導航的「A *算法」。你所做的就是通過計算每條可能的路線,並選擇最短路線,將自己的方式蠻力推向最佳路線。例如,如果你的地圖是:

X 
XXX 
A B 

而且你想從A到B獲得,你產生的地圖:

(U =向上等)

U 
UR 
URU 
URUD 
URUDR 
URUDRD* 
URR 
URRD* 

它會看起來像這樣。 *表示路線到達目的地,然後它看着所有的路線,並選擇最短路線。

A *的優點是您可以對每個部門應用權重。如果在一個扇區內有一個星雲需要經過3倍的星雲,可以通過比較總的「努力」而不是操作的數量來將它包括在算法中。這在你的角色通過路徑導航的遊戲中很酷,因爲路徑要快得多:)

這個在線搜索算法很多,只搜索A *尋路。祝你好運!