2016-04-23 64 views
0

我正在編寫一個戰艦遊戲,我需要一些方法來跟蹤船舶的位置。我在想這樣做的最好方法是使用ArrayList。如果我存儲了已放置船舶中包含的索引,則可以遍歷ArrayList來表示它是無效的位置。例如,如果我有像這樣的循環:在ArrayList中存儲二維數組索引?

for (int j = 1; j < SIZE; j++) 
{ 
    for (int k = 1; k < SIZE; k++) 
    { 
     if ((cell[j][k].contains(click))) 
     { 
      cell[j][k].setColor(Color.blue); 
     } 
    } 
} 

我想細胞[J] [K] 位置存儲在一個ArrayList,並且當它的時間爲用戶將船,運行for循環以確定該單元是否被佔用。問題是當我嘗試添加到ArrayList時,我添加了實際的單元格,而不是索引。我想要將實際位置(x,y)存儲在列表中,但現在我正在存儲實際元素。

+1

你可以使用Java的點類或只使用你自己的。有一個'ArrayList '。 https://docs.oracle.com/javase/7/docs/api/java/awt/Point.html – Gendarme

+0

數組索引從零開始。小心。 –

+1

我不確定你需要什麼Arraylist。你的二維數組有固定的大小。 –

回答

0

存儲x和y值的列表是使用Java的點類的理想情況。

ArrayList<Point> shipPositions = new ArrayList<Point>(); 
shipPositions.add(new Point(0, 0)); 

點的ArrayList可以很容易地修改,並通過迭代來添加和刪除船位置。

+0

所以,如果我想檢查ArrayList是否包含該點,我會做'if(!shipPositions.contains(new Point(0,0)' –

+0

'使用'shipPositions.contains(new Point(0,0))'將工作很好,以檢查一個點,但我不確定是否要讓布爾值不是('!'),因爲這將檢查ArrayList是否不包含該點。 – Betato

0

您可以爲每艘船製造單獨的物體。你可以做具有x和y浮動(或點保持簡單)一個相當簡單的類,然後只是使船舶的陣列,像這樣

Ship[] ships = new Ship[n]; 

ArrayList<Ship> ships = new ArrayList<Ship>(); 

,然後您可以獲得ships[n](對於第一個示例)或ships.get(n)(對於第二個示例)的值。

這將允許您使用此陣列不僅僅是位置,並儘量減少多餘和不必要的代碼。 :)