Teil 10: Geordnetes Chaos I

Wollten wir das bisherige Vorgehen fortsetzen, und alle Spielobjekte in CGSGame anlegen, würde das früher oder später im Chaos enden.

Massenhaft verschiedene Variablen und Arrays/Listen würden nicht nur die Lesbarkeit des Headers beeinflussen. Und letztendlich haben wir ja einen Vorteil: Alle Spielobjekte, sei es der eigene Gleiter, ein Feind oder Weltraumschrott, können von der selben Basisklasse abgeleitet werden. Was liegt also näher, als alle in einer einzigen Liste zu verwalten?

Wir werden hierzu einen STL Vektor verwenden. Einen Vektor kann man sich ähnlich einem Array vorstellen: Alle Elemente liegen linear hintereinander im Speicher, und ein Zugriff per [] Operator ist möglich. Der STL Vektor erweitert das Array allerdings um die Funktionalität einer verketteten Liste, man kann also recht einfach Einträge anhängen oder entfernen. Neben dem Zugriff über [] gibt es eine weitere Möglichkeit, auf die Elemente zuzugreifen: Den sog. Iterator. Ein Iterator ist einfach umschrieben nichts weiter als ein Zeiger auf ein Listenelement. Wozu, wenn man doch den [] Operator hat, werden einige jetzt Fragen? Ein Iterator wird z.B. dann benötigt, wenn ein Element aus der Liste gelöscht werden soll - somit fällt das lästige Umkopieren der nachfolgenden Elemente weg. Der Vektor ist, wie die Abkürzung STL = Standard Template Library schon suggeriert, als Template implementiert, d.h. er kann jeden beliebigen Datentyp aufnehmen. Aber ein Beispiel sagt mehr als tausend Worte:

Wir werden einen solchen Vektor also von unserer CEntity Basisklasse erstellen. Da wir unsere Spielobjekte dynamisch anlegen werden, verwenden wir konkret Zeiger auf CEntity in der Liste. Damit wir nicht ständig std::vector< CEntity* > tippen müssen, fügen wir noch ein typedef nach der Klassendeklaration von CEntity in Entity.h ein:

Datei /objects/Entity.h:

Das Verständnis des STL-Vektors ist für den folgenden Teil essentiell, denn wir werden massiv davon gebrauch machen, um unsere Spielobjekte zu verwalten.

Wer genau hinschaut, entdeckt ausserdem ein neues Flag “m_bDestroy” im Header. Dieses Flag wird unserem Manager verraten, ob das Objekt gelöscht werden kann. Ist das also für den Spieler-Gleiter auf “true”, sieht es ziemlich schlecht für ihn aus …

Mehr davon gibt’s im zweiten Teil.

Popularity: 1%


Write a Comment

Take a moment to comment and tell me what you think. Some basic HTML is allowed for formatting.

Reader Comments

Be the first to leave a comment!




FireStats icon Powered by FireStats