Klasse CMeister

CMeister - Der Meister der Labyrinthe

Die Klasse CMeister übernimmt direkt nach Programmstart die Kontrolle über das Spiel. Mit ihrer Hilfe kann der Benutzer das Labyrinth erstellen. Ist dies geschehen, so wird von ihm das eigentliche Spiel gestartet, und die Kontrolle geht an die Klasse CSpieler über. Eine sinnvolle Ergänzung wäre die Möglichkeit, aktuelle Zustände speichern oder laden zu können, da hier das Labyrinth bei jedem Programmstart neu erzeugt werden muß.

Der Meister koordiniert somit den Labyrinthaufbau und stellt die Datenintegrität vor dem Spielbeginn sicher, damit Prüfungen solcher Art innerhalb während des Spieles nicht notwendig werden.

CMeister besteht aus vier Funktionsgruppen:

Konstruktion / Destruktion

class CMeister
{...
public:
CMeister (string strName);
virtual ~CMeister();
...};

Der Konstruktor initialisiert alle Datenstrukturen auf gültige Werte, in dem er die notwendigen Objekte erstellt. Da alle Speicheranforderungen sich in einer Änderung in einer der beiden Listen m_plistRaum bzw. m_plistGegenstand niederschlägt wird dies vom Destruktor genutzt um alle Speicherbereiche, die angefordert wurden, auch wieder freizugeben.

Datenstrukturen

class CMeister
{...
private:
CList<CRaum *> * m_plistRaum;
CList<CGegenstand *> * m_plistGegenstand;
CSpieler * m_pSpieler;
string m_pstrName;
...};

Da CMeister die zentrale Labyrinthverwaltung darstellt, ist sie für das vollständige Freigeben des angeforderten Speicherraums für die einzelnen Objekte verantwortlich. Zu diesem Zweck existieren zwei Listen, in denen alle vorhandenen Räume und Gegenstände gespeichert werden. Diese Listen werden durch die Labyrinth - Konfigurationsroutinen verwaltet.
m_pSpieler sichert die Adresse des aktuellen Spielerobjektes, während in m_pstrName der Name des Spieles abgelegt wird.

Spielzustand:

class CMeister
{...
private:
CRaum * m_praumBeginn;
CRaum * m_praumEnde;
CList<CGegenstand *> * m_plistInventar;
...};

Die beiden CRaum Zeiger definieren den Spielstart und das zu suchende Ende. Die Liste m_plistInventar wird beim Spielstart dem Spieler übergeben. Sie stellt das aktuelle Inventar des Spielers dar. Wird das Spiel von diesem beendet, so übergibt er das aktualisierte Inventar zurück an CMeister.

Funktionen des Nachrichten Handlers

class CMeister
{...
private:
// Gegenstandsverwaltung
virtual int msgGegenstandErstellen();
virtual int msgGegenstandZuordnen();
virtual int msgGegenstandLoeschen();
// Raumverwaltung
virtual int msgRaumErstellen();
virtual int msgRaumZurodnen();
virtual int msgRaumLoeschen();
// Listenausgabe
virtual int msgGegenstandListe();
virtual int msgRaumListe();
// Spielerverwaltung
virtual int msgSpielerAnlegen();
virutal int msgSpielerLoeschen();
// Spielzustand
virutal int msgStartEnde();
virtual int msgSpielstart();
...};

Diese Hilfsfunktionen dienen zur Nachrichtenbehandlung. Sie werden von der Nachrichtenschleife CMeister::Start() aufgerufen. Die virtuelle Deklaration ermöglicht das Anpassen auf eine erweiterte Spielstruktur. Sie übernehmen beim Aufruf jeweils die Kontrolle über Bildschirm und Tastatur.
Diese Menüstruktur besitzt einige Schwachpunkte, die in der dritten Übung beseitigt werden. Derzeit besteht keine Möglichkeit, einmal zugeordnete Gegenstände einem anderen Objekt zuzuordnen. Dazu muß der Gegenstand zuerst gelöscht und dann neu erstellt werden.

Gegenstandsverwaltung:

Mit Hilfe dieser Funktion lassen sich die Gegenstände verwalten. Dabei ist eine Zuordnung sowohl an den Spieler als auch an einen Raum möglich. Auf Grund der Aufgabenstellung sind hier noch keine komplexen Funktionen wie das Ändern einer Zuordnung implementiert.

Raumverwaltung:

Analog zur Gegenstandsverwaltung lassen sich hier Räume erstellen und löschen. Die Raumzuordnung ermöglicht es, Verbindungen zwischen den einzelnen Räumen aufzubauen.

Listenausgabe:

Dies sind Hilfsfunktionen, die sowohl direkt durch den Benutzer, als auch indirekt durch andere Nachrichten - Handler aufgerufen werden. Sie geben eine komplette Liste der Gegenstände bzw. der Räume aus.

Spielerverwaltung:

Diese Menüpunkte erstellen oder löschen den aktuellen Spieler.

Spielzustand:

Der Nachrichten Handler msgStartEnde legt Start- und Zielraum fest. Sind diese Informationen vorhanden, kann das Spiel mit msgSpielstart gestartet werden. Zu diesem Zeitpunkt geht die Kontrolle an die Klasse CSpieler über.

Öffentliche Zugriffsfunktionen

class CMeister
{...
public:
virtual string GetName ();
virtual int CheckEnde (CRaum * pRaum);
virtual int Start ();
...};

Außer dem Konstruktor und dem Destruktor sind dies die einzigen öffentlichen Memberfunktionen der Klasse CMeister. Die Funktion CMeister::GetName() liefert den Namen des aktuellen Spieles. Die Menüschleife wird durch die Funktion CMeister::Start() eingeleitet. CMeister::CheckEnde(..) wird derzeit von der Klasse CSpieler benötigt, um festzustellen, ob das Spielziel erreicht ist.