baertschi / BomberGirl

Qt Bomberman Clone
MIT License
0 stars 0 forks source link

Design related questions #1

Closed baertschi closed 10 years ago

baertschi commented 10 years ago

Wieso braucht FieldContent ein Pointer auf FieldContents?

Wenn Field rein abstrakt ist, und FieldContent onStep und onBurn nicht implementiert, ist auch FieldContent abstrakt und es kann keine Liste von FieldContent Elementen im Ground Feld erzeugt werden. --> Lösung wäre keine Liste oder Array zu machen, sondern für alle Objekte welche instanziert werden können ein Feld reservieren. (sauber?)

stocyr commented 10 years ago
  1. Wenn z.B. ein Brick vom Fire zerstört wird, ruft irgend ein Fire-Objekt den Destruktor des Bricks auf. Damit aber danach das entsprechende Ground-Element, welches den Brick als FieldContent-Pointer "besass" auch weiss, dass dieses Objekt jetzt zerstört ist, muss der Destruktor des Bricks diesen FieldContent-Pointer auf NULL setzen können. Was mir jetzt gerade noch einfällt ist: es geht auch schöner: das Fire ruft ja beim Ground-Feld die onBurn()-Methode auf. Diese könnte dann den Destruktor aufrufen und anschliessend auch gerade den Pointer löschen. Nur: der Brick-Destruktor darf erst ausgeführt werden, wenn das Feuer das Ground-Field verlässt.

Darum Vorschlag: Wir erstellen noch eine 3. Visitor-Methode namens onFireLeave(), welche solche Sachen handelt. Dann führen alle Fire-Objekte beim instanzieren gleich mal onBurn() beim aktuellen Feld auf, und später, wenn sie "verschwinden" sollten, führen sie noch onFireLeave() aus.

onBurn() könnte man sogar verwerfen... das hat nämlich nur Einfluss auf den Player - der ist aber nicht in der map...

  1. Bezüglich der zweiten Frage: Wir haben das schon geändert - es ist jetzt keine Liste mehr sondern Ground besitzt 4 Pointer auf alle "möglichen" Speicherplätze: brickElement, bombElement, fireElement und itemElement.