2013-05-18 81 views
0

我正在做一個pacman遊戲,我目前正在研究鬼魂ai。我正在計劃使用Dijkstra的算法進行尋路。我的問題是,當我的遊戲加載時,圖形的頂點存儲在矩陣中。我想每個頂點分配所有的邊緣喜歡這個轉換頂點[]到圖

for(int x = 0; x<40; x++) 
    { 
     for(int y = 0; y<40; y++) 
     { 
      Vertex vertex = map[x][y]; 
      vertex.adjacencies = new Edge[]{new Edge(map[x-1][y], 1), new Edge(map[x+1][y], 1), new Edge(map[x][y-1], 1), new Edge(map[x][y+1], 1)}; 
     } 
    } 

的問題是,它有時拋出一個數組越界異常。我怎樣才能解決這個問題,而不需要大量的if語句來檢查當前頂點是否在圖的邊上。

+0

你不需要大量的if語句。只是4.另一方面,你需要存儲它們嗎?爲什麼不根據需要從矩陣中獲取它們呢? –

+0

更多一個爲每個角落,然後一個爲每個邊緣不是一個角落 –

+0

錯誤號碼。你需要一個,如果是北方,一個是南方,一個是西方,一個是東方。 –

回答

0

一個簡單的方法是在邊緣周圍包含一個不可穿越的邊界。

例如,如果您的實際地圖是40x40,則可以聲明42x42陣列。行0和n將是不可穿越的,列0和n也是如此。

你仍然需要處理左側和右側之間的pacman的圓柱形行程。

0

你應該用的1 「邊界」 開始你的循環,像這樣:

for(int x = 1; x < 39; x++) 

因爲,當你與地圖創建邊緣[X-1] [Y]用斧子開始爲0,它將-1作爲數組索引,所以它會拋出一個Array Out of Bounds異常。