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;
    

Anmelden zum Antworten