Speichern einer raster-Objekte mit x-und y-Koordinaten zur Beschreibung der Lage. Ein array ist eine akzeptable Lösung?
Ich entwickle ein Spiel auf Android-mit einem Netz von Objekten. Im Moment arbeite ich mit einem array zu speichern, das Objekte, wie diese:
public class ObjectBuffer {
private final Object[] buffer;
private final int playfieldWidth;
ObjectBuffer(int playfieldWidth, int playfieldHeight) {
super();
this.buffer = new Object[playfieldWidth + (playfieldHeight * playfieldWidth)];
this.playfieldWidth = playfieldWidth;
}
public static int getX(int id) {
return id % playfieldWidth();
}
public static int getY(int id) {
return id / playfieldWidth();
}
public Object get(int id) {
return this.buffer[id];
}
public Object get(int x, int y) {
return this.buffer[x + (y * this.playfieldWidth)];
}
}
Aber meine Frage ist, ist dies der beste Weg, dies zu erreichen? Ich habe ein array (im Gegensatz zu einer Liste, ArrayList, oder einige andere Behälter) weil, sobald die Breite und Höhe des Spielfeldes gesetzt sind, Sie nicht ändern. Die Objekte gibt es für den Staat, und wenn Sie instanziiert und in das array eingefügt, Sie kann aktualisiert werden, aber sind nicht geordnet.
Meine Frage ist ähnlich Das speichern von Objekten für das Auffinden von x -, y-Koordinaten, aber unterschiedlich genug, dass ich Fragen wollte, meine Frage separat. Meine Anforderungen anders sind als seine und ich glaube nicht, dass ein räumlicher index wäre es angebracht in dieser situation. Bitte korrigieren Sie mich, wenn ich falsch Liege.
Sollte ich auch erwähnen, das die array-Dimensionen werden in der Regel 10x10 (100 Elemente), aber eventuell müssen in der Lage sein, um Platz für eine bescheidene Zunahme, aber nicht mehr als etwa einem 15x15 raster (225-Elemente). Diese Dimensionen werden immer bekannt sein, die bei der Generierung des Gitters. Nachdem das Gitter wurde erzeugt, der die Dimensionen nicht ändern.
- Für Ihr Spiel, ich vermute, dass jeder Punkt im Netz zu halten, kann ein Objekt wie eine Kugel, Schlachtschiff, elf, oder was auch immer. Können zwei von Ihnen am gleichen Punkt? Wenn dem so ist, müssen Sie möglicherweise verwenden Sie irgendeine Art von Sammlung bei der jeder der Punkte auf dem Gitter.
- Jede Position im Gitter halten eine Blase, und jede Blase kann eine unterschiedliche Farbe oder andere Attribute. Die Blasen nicht überlappen, beim Tippen, die Blase oder andere Blasen um ihn herum, wird 'pop' und verschwinden, dann werden die Blasen oben fallen zu nehmen, ist es Platz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bessere option wäre, um eine point-Klasse
dann erstellen Sie ein array von Point-Objekten
wenn Sie möchten, legen Sie die Koordinaten für mypoint[i]
Sammlungen sind nicht nur über die Unterstützung Datenstrukturen eine dynamische Größe, Sie sind für die Definition der Datenstruktur Verhalten. Es ist nichts falsch mit der Verwendung eines Arrays (an einem gewissen Punkt in der call-stack wird es sowieso), aber die Definition einer Sammlung können Sie die Flexibilität von aufrufen von Methoden zu bekommen, was Sie benötigen, anstatt die Referenzierung von array-Koordinaten. So, wenn Sie Sie brauchen, um das Verhalten des Koordinatensystems (zum Beispiel, sagen, Sie wollten die Maske " den Inhalt eines grid Referenz von einem anderen Spieler?) Sie nicht notwendigerweise brauchen Sie zu berühren, den code iteriert durch das array.
Ein mehrdimensionales array wäre die bessere Lösung:
Dies gibt mehr lesbaren code, da Sie sich beziehen können, um ein element als
playfield[x][y]
stattplayfield[x + y * WIDTH]
. Eine weitere option, wenn Sie möchten, verwenden Sie Sammlungen, wäre dieTable
Klassen in Google Guava.