2016-04-23 16 views
0

Ich schreibe ein Schlachtschiff-Spiel und ich brauche einen Weg, um zu verfolgen, wo die Schiffe platziert wurden. Ich denke, der beste Weg dazu ist eine ArrayList. Wenn ich die Indizes, die in einem platzierten Schiff enthalten sind, speichere, kann ich die ArrayList durchlaufen, um anzuzeigen, dass es sich um eine ungültige Position handelt. wenn ich eine Schleife wie so habe zum Beispiel:2D-Array-Index in ArrayList speichern?

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); 
     } 
    } 
} 

Ich mag die Zelle speichern [j] [k] Position in einer Arraylist, und wenn es Zeit ist für den Benutzer, das Schiff zu platzieren , wird eine for-Schleife ausgeführt, um zu bestimmen, ob diese Zelle besetzt ist oder nicht. Das Problem ist, wenn ich versuche, der ArrayList hinzuzufügen, ich die tatsächliche Zelle, nicht den Index hinzufügen. Ich möchte, dass die aktuelle Position (x, y) in der Liste gespeichert wird, aber momentan speichere ich das eigentliche Element.

+1

Sie könnten Javas Point-Class verwenden oder einfach Ihre eigenen verwenden. Habe eine 'ArrayList '. https://docs.oracle.com/javase/7/docs/api/java/awt/Point.html – Gendarme

+0

Array-Indizierung beginnt bei Null. Achtung. –

+1

Ich bin mir nicht sicher, wofür Sie einen Arraylist brauchen. Ihr 2D-Array hat eine feste Größe. –

Antwort

0

Das Speichern einer Liste von x- und y-Werten ist ideal, um die Java-Punktklasse zu verwenden.

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

Die ArrayList Punkte können leicht geändert werden und iterativ durch Schiffspositionen hinzufügen und entfernen.

+0

Also, wenn ich überprüfen wollte, ob die ArrayList den Punkt enthielt, würde ich 'if (! ShipPositions.contains (new Point (0,0)' –

+0

Mit 'shipPositions.contains (new Point (0,0)) 'wird Ich bin mir nicht sicher, ob Sie den Boolean nicht ('!') einfügen wollten, da dies prüfen wird, ob die ArrayList _not_ den Punkt enthält. – Betato

0

Sie können für jedes Schiff ein separates Objekt erstellen. Sie könnten eine ziemlich einfache Klasse mit einem x und y-Schwimmer (oder einem Punkt, um es einfach zu halten) machen und dann einfach eine Reihe von Schiffen wie so

Ship[] ships = new Ship[n]; 

oder

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

machen und dann Sie könnten den Wert bei ships[n] (für das 1. Beispiel) oder ships.get(n) (für das 2. Beispiel) erhalten.

Damit können Sie dieses Array für mehr als nur Positionen verwenden und überflüssigen und unnötigen Code minimieren. :)

Verwandte Themen