Hallo Leute
Ich muss nun ein Java Projekt schreiben, das Schiffe versenken behandelt.
Meine Überlegung ist nun ich erzeuge ein Board auf dem alle Felder sind.
Dabei erstelle ich eine Klasse Field mit den Koordinaten und seinen Status (besetzt/nicht besetzt)…
So die Klasse Board hat eine Dimension von 12x12 und das Spielfeld “fieldarray” soll vom Typ Field[][] sein (wurde mir empfohlen)…
Nun möchte ich jedes einzelne Feld vom “fieldarray” füllen und zwar mit meiner eigenen Klasse Field…
so in etwa:
private Field field;
private int width, height;
private ArrayList<Ship> shipList;
private Field[][] fieldArray;
public Board(int w, int h){
width = w;
height= h;
fieldArray = new Field[width][height];
for (int i = 0; i<fieldArray.length; i++){
for (int j = 0; j<fieldArray[0].length; j++){
fieldArray**[j] = new Field(i,j);
}
}
Mache ich so alles richtig? Es kommt mir nämlich irgendwie doppelt gemoppelt vor…
Kann mir vllt noch mal jemand die Java Klasse Field bzw. Field[][] erklären? In der API verstehe ich die nämlich nicht ganz so…
Ja stimmt, ich habe auch nachher gemerkt, dass es in diesem Fall meine eigene Field Klasse ist.
Ich habe aber die Java Field Klasse beim Schiff-Objekt verwendet
public Ship(Field[] b){
body = b;
}
Und später rufe ich folgende Kommandozeile auf:
Field[] body = new Field[length];
wobei length die Länge eines Schiffes ist
Aber diese Java Field-Klasse wurde mir in der API nicht so recht bewusst. Wie ist die zu verstehen, u.a. in diesem Fall?
Die Field-Klasse von Java beschreibt praktisch eine Instanzvariable:
class Klasse
{
private int instanzvariable = 0; // Das ist ein Field
}
man kann sich mit “Reflection” (siehe java.lang.reflect) von einer Klasse alle Fields auflisten und deren Werte verändern und so, aber das braucht man nur in sehr speziellen Zusammenhängen (ist nichts für den Anfang ;))
Du solltest wohl überall (d)eine Field-Klasse verwenden, die wohl etwa(!) so aussieht wie
class Field
{
private int x;
private int y;
....
public Field(int x, int y)
{
this.x = x;
this.y = y;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
}