Array für verschiedene Typen erzeugen

asipak4you

Erfahrenes Mitglied
Tach auch.

Ich erstelle eine n x m Matrix, wobei n = breite_des_bildschirms / 25 ist und m = hoehe_des_bildschirms / 25 ist. Ich habe also n * m felder und auf jedes Feld lege ich eine 25x25 Pixel große Textur (also eine kleine Grafik)

Das Array ist vom Typ Image[][] matrix = new Image[window_width/25][window_height/25];

Nun möchte ich einen Weg für mein Spiel anlegen, dieser besteht ebenfalls aus 25x25 Pixel großen Bildern. Manuell trage ich diese Grafiken dann in die Matrix ein. Dort wo ein Matrixfeld == null ist, wird einfach nur Gras gezeichnet um die leeren Flächen zu füllen. Nun möchte ich aber noch kleine Objekte zeichnen (diese sind nicht auf den Wegen), welche ich dann auch in der Matrix speichern möchte.
Damit meine Figuren dann aber über den Weg laufen sollen, kann ich nicht mehr gut zwischen Wegtextur und Objekttextur in der Matrix unterscheiden. Ich dachte mir also brauche ich jedem Matrixfeld statt nur der Grafik noch einen Eintrag für den Texturtyp, z.B. eine Integerzahl (1 für Weg, 2 für Objekt, 3 für ...).

doch wie bekommen ich jetzt z.B. in

matrix[0][0] noch ein array rein, das verschiedene Typen verwalten kann?

z.B.
Code:
matrix[0][0][0] = weg_image; //wäre ja vom Typ image
matrix[0][0][1] = 1; //wäre vom Typ integer

matrix[0][1][0] = objekt_image; //wäre ja vom Typ image
matrix[0][1][1] = 2; //wäre vom Typ integer

//...etc....
 
Am Besten erstellst du dir ein Interface:

Java:
interface GameCard {
    //wenn es gemeinsame Methoden gibt dann hier deklarieren z.B.:
    //String getDescription();
}

Dann kannst du verschiedene Klassen dein Interface implementieren lassen:
Java:
public class SomeCard implements GameCard {


}

Das Array erstellst du dann über das Interface
Java:
GameCard [][] cards = new GameCard[25][25];
 
Hallo,

danke für deine Antwort, aber ich glaube du hast meine Frage falsch verstanden (vielleicht ist der Threadtitel auch schuld).

Nicht verschiedene Klassen erzeugen diese Matrix, sondern nur eine und zwar die, in der das Spiel gestartet wird. Dort werden alle Texturen initialisiert und in die Matrix eingelesen.

Was ich brauche ist ein Array, das sowohl Daten vom Typ int als auch vom Typ Image aufnehmen kann, wenn es so etwas überhaupt gibt.
 
Zuletzt bearbeitet:
Ich habe dich sehr wohl verstanden. Das Array wird auch nur an einem Punkt erzeugt, kann aber über das Interface unterschiedliche Typen aufnehmen.

Du kannst so unterschiedliche Objekte in dein Array packen. Je nach Typ des Objektes (welches du selber implementierst und dabei das Interface implementierst) kannst du dann unterschiedliche Dinge zeichnen lassen. So trennst du Daten und Darstellung voneinander.

In deinem Interface könntest du z.B. eine getImage Methode anbieten die du dann zum Zeichnen verwenden kannst.
 
Das hört sich soweit ganz brauchbar an. Habe es so gemacht wie du geschrieben hast und das Array folgendermaßen initialisiert:
Code:
GameCard[][][] matrix;
matrix = new GameCard[window_width/25][window_height/25][2];
wenn ich jetzt ein Element in die Matrix einfügen will, bekomme ich ein Type missmatch

Code:
matrix[4][0][0] = img_src;

Was hab ich nicht verstanden?
 
Das hieße dann, dass ich für jede Grafik ein Objekt erzeugen müsste, das als Eigenschaft eine Grafik hat, die Schnittstelle implementiert und dann in das Array eingefügt wird, welches sich in der Spieleklasse befindet, welche ebenfalls die Schnittstelle implementiert? Hab ich das richtig verstanden?
 
GameCard = interface?

wenn ja:
du musst
Am Besten erstellst du dir ein Interface:

Java:
interface GameCard {
    //wenn es gemeinsame Methoden gibt dann hier deklarieren z.B.:
    //String getDescription();
}

Dann kannst du verschiedene Klassen dein Interface implementieren lassen:
Java:
public class SomeCard implements GameCard {
//Ischterai:hier machst du eine integer Variable rein für deinen integer

}

Das Array erstellst du dann über das Interface
Java:
GameCard [][] cards = new GameCard[25][25];//Ischterai:hier Fehler, müsste SomeCard sein, nicht interface
// Ischterai: (alles von mir)
SomeCard wald = new SomeCard();
wald.setIntegerEbene(2);// Variable die festlegt, das du hier jetzt 2 Texturebenen hast
//eine Boden, eine Objecte
cards[0][0] = wald;

so müsste es ungefähr gehen, wenn ich dich richtig verstanden hab.
 
@Ischterai: Nein das Array muss natürlich vom Typ des Interface sein, sonst hat das ja keinen Sinn.

Abgesehen davon kommentiert man nicht in quotes rum.
 
@Ischterai: Nein das Array muss natürlich vom Typ des Interface sein, sonst hat das ja keinen Sinn.
Aber dann bekomme ich doch wieder einen type-missmatch, oder nicht? Habt ihr auch meinen letzten Beitrag gelesen? Habe ich das so richtig verstanden?

Und kommt der Code aus der dritten Code-Box auch in die Klasse SomeCards oder wohin sonst?
Ich bin gerade etwas verwirrt :(

EDIT:
Die Objekte der Klasse SomeCards wären in meinem Fall ein 25x25 großes Feld, das als Eigenschaft eine Grafik hat und den Integer zur Typidentifizierung? Das würde jetzt für mich Sinn mache. Der Code aus der dritten Box würde damit nicht in die Klasse SomeCards gehören, sondern dorthin, wo das Spiel gestartet wird, oder?
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück