Karte als Klasse
-
Hi,
ich hab ein Problem, ich will eine zweidimensionale, tilebasierte Karte mittels einer Klasse realisieren.
Diese Klasse soll dann ein zweidimensionales Array/vector etc., welches die eigendliche Karte representiert, und einige weitere Daten enthalten. Nur leider weiß ich zur Zeit der Klassendeklaration nicht, wie groß die Karte sein soll, da das vom Spieler angegeben wird. Ich möchte auch keinen Pointer auf einen vector verwenden, da dieser bei einer Veränderung der Größe des vectors ja wahrscheinlich ungültig wird. Wie könnte ich dies realisieren?Danke schonmal im Vorraus!!
-
Ich schreib gerade ne Simualtion für einen Lebensraum.
Ist so ne art Spiel des Lebens XXL.Da hab ich es so gemacht, das meine Map Klasse das ganze in einen
**Pointer verpackt, und im Konstruktor entsprechend allokiert.
Klappt eigentlich ganz gut.Kommt natürlich drauf an was du vorhast, und wie weit du in der Planung bist...
Devil
-
Hm, kanste mir dazu mal ein Code-Beispiel posten?
Mittlerweile überlege ich, ob ich die KArte nicht einfach als eindimensionales Array speichern soll, das kann ich ja in einem int* speichern und mit new zur laufzeit anlegen...
-
Nikk schrieb:
..., ob ich die KArte nicht einfach als eindimensionales Array speichern soll, das kann ich ja in einem int* speichern und mit new zur laufzeit anlegen...
Du kannst auch ein 2 Dimensionales Array zur laufzeit mit new anlegen.
Aber evtl ist es einfacher dafür
std::vector< std::vector < DatenTyp > >
zu verwenden.
MfG
-
Hallo
ich würde einen eindimensionalen vector empfehlen, auf den du die zweidimensionalen Positionen umrechnest :
Gesamtanzahl = Zeilenanzahl * Spaltenbreite
Position = (Zeile * Spaltenanzahl) + Spalte
so stellst du sicher, das in jeder Zeile gleich viel Spalten sind.
Das Erstellen und Umrechnen kann man gut in einer Klasse verbergen.bis bald
akari
-
Und warum bitte das?
-
@ eViLiSSiMo:
Wie kann ich denn ein zweidimensionales Array mit zwei variablen DImensionen zur Laufzeit anlegen?
Doch nur als eindimensionales Array aus Pointern auf wieder eindimensionale Arrays as Datentyp, oder?
Wenn es eine andere Möglichkeit gibt, wäre ich sehr erfreut, diese zu hören!Wenn ich einen Vector nehme, so ist auch dieser nicht wirklich zweidimensional, da sich auch hier die Größe jedes einzelnen arrays der zweiten Dimension einzeln festlegen lässt.
Danke für eure Hilfe, MFG Nikk
-
@Nikk
const unsigned XSIZE = 10; const unsigned YSIZE = 10; // Speicherallokation für ein array mit YSIZE pointern auf int int **array2d = new int*[YSIZE]; // Speicherallokation für XSIZE int * für jeden pointer auf int for(unsigned i = 0; i < YSIZE; ++i) array2d[i] = new int[XSIZE]; // array füllen mit zahlen von 1 bis 100 for(unsigned x = 0; x < 10; ++x) for(unsigned y = 0; y < 10; ++y) array2d[x][y] = ( x * 10 ) + y + 1; // array inhalt ausgeben for(unsigned x = 0; x < 10; ++x) for(unsigned y = 0; y < 10; ++y) std::cout << array2d[x][y] << std::endl; // speicherfreigabe for(unsigned i = 0; i < YSIZE; ++i) delete[] array2d[i]; delete[] array2d;