Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

06.05.2013, 23:11

Sieht soweit ok aus, um genauer zu sagen, ob man es so oder anders machen sollte, müsste man vermutlich mehr darüber wissen, was die einzelnen Klassen genau machen.
Was du aber auf jeden Fall überlegen könntest, wäre Referenzen statt Pointer zu benutzen und diese dem Konstruktor zu übergeben. Der Vorteil des Konstruktors ist, dass du nicht vergessen kannst ihn aufzurufen, was dein Programm wieder robuster macht.

Ich denke da bleiben solche fehler nicht aus, aber es macht mir auch recht viel spaß, die fehler selbst zu finden, wenn es denn geht und dadurch zu lernen.

Das hört sich doch gut an. Mein erstes größeres Projekt ist auch daran gescheitert, das es irgendwann komplex war und seltsame Bugs hatte, die ich nicht mehr finden konnte, weil es schlecht strukturiert war. Für große Projekte braucht man eben Erfahrung und die muss man sich erarbeiten, anders geht es nicht.
Lieber dumm fragen, als dumm bleiben!

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

12

07.05.2013, 11:01

Debuggen wirst du selber müssen, als Anfänger wird das aber kniffelig. Da muss man dann eben durch. Natürlich kann man solche Fehler unwahrscheinlicher machen, indem man sauberer programmiert. Wieso speicherst du beispielsweise Mapheight in einer extra Variable und benutzt nicht einfach vector.size()? Im letzteren Fall ist nämlich ein Speicherzugriffsfehler quasi ausgeschlossen, während es im ersten Fall sehr leicht geschehen kann, das du den Vektor änderst, Mapheight aber nicht. Oder umgekehrt.
vector.size zu benutzen ist normalerweise vernuenftig und zu empfehlen. In diesem Fall wird aber gleich aus zwei vectoren gelesen. Ich wuerde hier zusaetzlich noch vorschlagen, mit einem Assert zu pruefen, ob MapHeight und die beiden sizes der vectoren alles den gleichen Wert haben. Im Debug faellt dann sofort auf, wenn man etwas kaputt macht.

13

07.05.2013, 12:12

Man könnte natürlich auch ein Eindimensionales Array benutzen. Der Vorteil ist dann, dass alles im Speicher hintereinander steht, was Zugreifen und kopieren einfacher/schneller macht und man nicht mehr so viele Vektorelemente verwalten muss (man braucht z.b. keine Schleifen mehr, um alle Spaltengrößen zu ändern).
Der Zugriff per x/y Koordinate ist natürlich zunächst aufwändiger, aber das kann man sich auch schön ein einer Funktion kapseln, oder man baut sich ein Proxy-Objekt für den Zugriff:

C-/C++-Quelltext

1
2
3
4
5
vector<int> MapData(Width*Height);
MapAccess Map(MapData, Width, Height);

Map[x][y]=15;//Ändert MapData an der entsprechenden Stelle
MapData[y*Width+x]=15; //Macht exakt das selbe, nur ohne Zugriffsobjekt

So würde ich es vermutlich machen. Oder vorher vielleicht nach mehrdimensionalen Vektor-Klassen suchen, irgendwer hat sowas gewiss schonmal geschrieben.

Für den Anfang sind verschachtelte Vektoren natürlich irgendwie intuitiver. Nur ist das eben zunächst einmal nur eine Sammlung von Zeilen, die nur als Spezialfall immer die selbe Länge haben. Wenn das aber explizit gefordert ist, macht es auch Sinn, das vom Design her zu erzwingen.
Lieber dumm fragen, als dumm bleiben!

14

08.05.2013, 13:09

boost bietet mehrdimensionale arrays. ist nicht ganz so einfach damit zu hantieren (kommt zumindest darauf an, was man machen möchte) aber man kann mit zurecht kommen.

http://www.boost.org/doc/libs/1_53_0/lib…y/doc/user.html

Werbeanzeige