Klassendiagramm
Diagramm
Klassenbeschreibung
(Die Klassenbeschreibung ist nicht mehr ganz aktuell und Vollständig. Während der
Implementierung wurden noch einige Änderungen vorgenommen, die allerdings nur im Diagramm
aktualisiert wurden)
CAPachisiView
Die Haupt-View-Klasse unserer Model/View Architektur.
CAPachisiView ist für die Darstellung des Spiels verantwortlich.
Sie fängt die vom Benutzer ausgelösten Events ab und leitet diese Informationen an das Document weiter.
Im einzelnen werden von der View folgende Ereignisse angestoßen:
- Neues Spiel anlegen
- Ein neues Spiel starten
- Ein laufendes Spiel speichern
- Ein zuvor gespeichertes Spiel laden.
- Felder auf dem Spielbrett anklicken
- Skip auslösen
Diese Events werden entweder über eine Menü- und/oder eine Toolbar ausgelöst.
Die eigentliche Spielhandlung wird über Mouse-Handler realisiert
Memberfunktionen
- void OnDraw() – Zeichnet die View
- void OnLButtonDown() – Fängt Mouseklicks vom Benutzer ab und leitet die Coordinaten an die View weiter
- void OnSpielstart() – Reagiert auf
einen entsprechenden Button der Toolbar. Diese Methode öffnet einen
neuen CSpielereingabeDialog. Dort können alle Spielparameter eingegeben
werden. Anschließend werden im Dokument alle relevanten Daten gesetzt
und ggf. neue Spielobjekte erzeugt.
- void OnSkip() – Unterbricht den
aktuellen Zug. Der Spieler kann vor oder nach dem Würfeln jederzeit auf
seinen Zug verzichten. Wenn kein Grace gewürfelt wurde, ist der nächste
Spieler an der Reihe.
Membervariablen
- CFeldPosition* m_pFeldPosition
CFeldPosition
Die Klasse CFeldPosition löst in der View die Koordinaten eines Mausklicks in einer eindeutige ID auf.
Memberfunktionen:
- uint HoleID(uint x, uint y) – Gibt die ID des Feldes zurück in dem die übergebenen Koordinaten liegen
- CRect* HoleRechteck(uint ID) – Gibt ein CRect-Objekt zurück, das die übergebene ID hat.
Membervariablen:
- sequence<CRect> – Speichert alle Felder im Spiel sortiert nach ihrer ID.
CTeam
Diese Klasse stellt den Bund zweier Spieler als Team dar. Sie enthält
zwei CSpieler Objekte. Es ist z.B. bei einer Burg nötig die
Teamzugehöritkeit zu kennen.
Memberfunktionen
- CTeam(CSpielerErstellung*
pSpieler1, CSpielerErstellung* pSpieler2) – Konstruktor der Klasse.
Jeder Spieler wird über die Klasse CSpielerErstellung initialisiert.
- BOOL IstImTeam( CSpieler* pSpieler) – Prüft ob der übergebene Spieler zum Team gehört
- BOOL IstTeamFertig() – Prüft ob die Spieler des Teams mit dem Spiel fertig sind
- CSpieler* HoleSpieler1() – Gibt einen Pointer auf den ersten Spieler zurück
- CSpieler* HoleSpieler2() – Gibt einen Pointer auf den zweiten Spieler zurück
Membervariablen
- CSpieler m_pSpieler[2] – Spieler des Teams
CSpielfigur
Repräsentiert eine Spielfigur eines Spielers. Sie kennt das Feld auf
dem sie steht und auch ihren Spieler. Sie merkt sich ob sie schon
einmal um das Spielbrett gegangen ist oder gerade erst ausgespielt
wurde. CSpielfigur kümmert sich um die Ermittlung der Zielfelder.
Memberfunktionen
- void GehHeim() – Setzt die Figur wieder auf das Startfeld, wenn sie geschlagen wurde
- BOOL KannZiehen(int nAugenzahl) – Berechnet, ob die Spielfigur um Anzahl Augenzahl Felder weiter ziehen kann.
- vector<CFeld*>
HoleZielFelder(int nAugenzahl) – Gibt einen Vektor mit ein oder zwei
Zielfeldern der Spielfigur zurück, die sie mit der übergebenen
Augenzahl erreichen kann.
- CSpieler* HoleBesitzer() – Liefert den Spieler zurück, zu dem die Spielfigur gehört.
- CFeld* HoleAktuellesFeld() – Gibt das Feld zurück, auf dem die Spielfigur steht
- void SetzeAktuellesFeld(CFeld* pAktuellesFeld) – Setzt das Feld, auf dem die Spielfigur steht.
- BOOL HoleUmrundet() – Gibt TRUE zurück, wenn die Spielfigur das Feld bereits einmal umrundet hat, FALSE sonst.
- void SetzeUmrundet(BOOL bUmrundet) – Setzt, dass die Spielfigur das Feld bereits einmal umrundet hat.
Membervariablen
- CSpieler* m_pSpieler – Pointer auf den Besitzer der Spielfigur
- CFeld* m_pAktFeld – Pointer auf das besetzte Feld
- BOOL m_bUmrundet – Wird auf True gesetzt, wenn die Spielfigur aus der Zielgeraden heraus kommt
CSpieler
Stellt einen Menschlichen Spieler dar, zu ihm gehören vier
Spielfiguren. Außerdem ein Start-, Ziel- und ZielBurgfeld. Er weiß zu
welchem Team er gehört.
Das ZielBurgfeld ist nötig, weil der Spieler auf diesem Feld zwei
unterschiedliche Wege einschlagen kann, wenn er das Spielbrett bereits
einmal umrundet hat.
Memberfunktionen
- CSpieler::CSpieler(CSpielerErstellung*
DesSpielersFelder) – spezieller Konstruktor, der die dem Spieler
zugeordneten Felder und seine Farbe in Form eines CSpielerErstellung
Objekts bekommt
- BOOL IstFertig() – Prüft, ob der Spieler alle Spielfiguren im Zielfeld hat und somit mit dem Spiel fertig ist
- CSpielfigur* HoleFigur( int nr ) – Gibt die Spielfigur mit der Nummer nr zurück
- CFeld* HoleStartfeld() – Gibt einen Pointer auf das Startfeld zurück
- CFeld* HoleZielfeld() – Gibt einen Pointer auf das Zielfeld zurück
- CFeld* HoleZielburg() – Gibt einen Pointer auf die Zielburg zurück
- CString HoleName() – Gibt den Namen des Spielers zurück
- uint HoleFarbe – gibt die Farbe des Spielers zurück
- CTeam* HoleTeam() – Gibt einen Pointer auf das Team des Spielers zurück
- CSpieler* HoleNaechsterSpieler() – Gibt den Spieler zurück, der nach dem aktuellen Spieler am Zug ist
- void SetzteSpielerNamen(CString sSpielernamen) – setzt den Spielernamen auf den übergebenen Wert
Membervariablen
- CString m_sName – Name des Spielers
- uint m_nFarbe – Farbe des Spielers
- CSpieler* m_pNaechsterSpieler – Pointer auf den Spieler, der als nächstes am Zug ist
- CTeam* m_pTeam – Team des Spielers
- vector<CSpielfigur> m_pSpielfiguren – Spielfiguren des Spielers
- CStartfeld* m_pStartfeld – Startfeld des Spielers
- CZielfeld* m_pZielfeld – Zielfeld des Spielers
- CZielburg* m_pZielburg – Burg am Eingang zur Zielgeraden des Spielers
CMuscheln
Sie stellen die 6 Kaurimuscheln dar, es kann gewürfelt werden und sie
errechnet die zu gehende Augenzahl. Es ist auch möglich auf einen Grace
Wurf zu prüfen.
Memberfunktionen
- void Wuerfeln() – Würfelt die Muscheln neu
- int HoleAugenzahl() – Gibt die entsprechende Augenzahl (Felder die man ziehen darf) zu den Muscheln zurück
- int HoleMuschelAnzahl() – Gibt die Anzahl der nach Oben liegenden Muscheln zurück
- BOOL IstGrace() – Gibt an ob die aktuelle Muschelzahl ein Grace darstellt
Membervariablen
- BOOL m_bMuscheln[6] – repräsentiert die 6 einzelnen Muscheln
- BOOL m_bGrace – Wird von Wuerfeln() auf True gesetzt wenn laut den Spielregeln ein Grace aufgetreten ist
CSpielbrett
Ist für den Aufbau des Spielbrettes zuständig und kennt alle
Spielfelder. Es verbindet die Felder miteinandern (Verkettung) und
ordnet sie den Spielern zu. Das Spielbretts löst auch die IDs zu den
CFeld-Objekten und umgekehrt auf.
Memberfunktionen
- BOOL IstMuschel(unit ID) – Ist True, wenn der übergebenen ID die Muscheln zugeordnet sind.
- uint HoleFeldID(CFeld* AufzuloesendesFeld) – Gibt die dem übergebenen Feld zugeordnete ID zurück.
- CFeld* HoleFeld(uint AufzuloesendesID) – Gibt das dem übergebenen ID zugeordnete Feld zurück.
- CFeldstatus*
HoleZuZeichnendeFelder() – durchsucht die Liste aller Felder und gibt
belegte oder markierte in Form eines CFeldstatus Objektes zurück
Membervariablen
- Container(ID, CFeld*) – Enthält die
Zuordung von IDs zu Feldobjekten (welche Art von Container wird sich
bei der Implementierung ergeben)
CFeld
CZustand
CFeldStatus
Adapterklasse um in der View die besonderen Felder zeichnen zu können.
Besondere Felder sind markiert oder von einer oder mehreren Figuren
besetzt.
Memberfunktionen:
- CFeldstatus::CFeldStatus(uint
nGelb,uint nSchwarz, uint nRot, uint nGruen, BOOL bMarkiert) –
Konstruktor von CFeldStatus. Braucht für jede Farbe die Anzahl der
Figuren, die dieses Feld besetzten und ein Flag, ob das Feld markiert
ist.
- BOOL IstMarkiert() – Gibt an ob das Feld besonders hervorgehoben werden soll
- uint HoleFeldID() – Gibt einem die ID des Feldes zurück
- uint HoleAnzahlGelb – Gibt die Anzahl der gelben Figuren auf dem Feld zurück
- uint HoleAnzahlSchwarz – Gibt die Anzahl der schwarzen Figuren auf dem Feld zurück
- uint HoleAnzahlRot – Gibt die Anzahl der roten Figuren auf dem Feld zurück
- uint HoleAnzahlGruen – Gibt die Anzahl der grünen Figuren auf dem Feld zurück
- void SetzteFeldID(uint nID) – Setzt die ID
Membervariablen:
- uint m_nID – ID des besonderen Feldes.
- uint m_nGelb – Anzahl der gelben Steine auf dem Feld
- uint m_nSchwarz – Anzahl der schwarzen Steine auf dem Feld
- uint m_nRot – Anzahl der roten Steine auf dem Feld
- uint m_nGruen – Anzahl der gruenen Steine auf dem Feld
- uint m_nGelb – Anzahl der gelben Steine auf dem Feld
- uint m_nRot – Anzahl der roten Steine auf dem Feld
- uint m_nGruen – Anzahl der gruenen Steine auf dem Feld
- BOOL m_bMarkiert – speichert, ob dieses Feld besonders hervorgehoben werden soll
CSpielereingabeDialog
Diese, von CDialog abgeleitete Klasse ermöglicht die Eingabe aller
relevanten Spielparameter. Von CAPachisiView angestoßen, öffnet sich
ein Fenster, in das die Spieler ihre Namen eintragen und ihre Farben
auswählen können. Mit der Wahl der Farbe ergibt sich auch die
Teamzugehörigkeit. Spieler1 (gelb) und Spieler2 (schwarz) bilden Team
1, Spieler3 (rot) und Spieler4 (grün) sind in Team 2. Neben einem
“Abbrechen”-Button, der die aktuellen Eingaben verwirft, ist zunächst
ein Button “Würfeln” aktiv. Wird dieser Button angeklickt, wird die
Startreihenfolge der Spieler automatisch ermittelt. Der Spieler mit der
höchsten Augenzahl wird markiert. Abschließend wird der
“Würfeln”-Button durch einen “Ok”-Button ersetzt.
Memberfunktionen
- CString HoleSpieler1() – Gibt den Namen des ersten Spielers zurück.
- CString HoleSpieler2() – Liefert den Namen des zweiten Spielers.
- CString HoleSpieler3() – Gibt den Namen des dritten Spielers zurück.
- CString HoleSpieler4() – Liefert den Namen des vierten Spielers.
- uint HoleBeginner() – Gibt die Nummer des Spielers zurück, der das Spiel beginnt.
Membervariablen
- uint m_nBeginner – Name des Spielers, der die Spielrunde eröffnen darf.
- CString m_sNameSpieler1 – Name des ersten Spielers
- CString m_sNameSpieler2 – Name des zweiten Spielers
- CString m_sNameSpieler3 – Name des dritten Spielers
- CString m_sNameSpieler4 – Name des vierten Spielers
CAPachisiDoc
Die Haupt Dokumenten Klasse unserer Model/View Architektur. Sie ist
hauptsächlich für die Kommunikation mit der View zuständig und stellt
Methoden zur Abfrage des aktuellen Spielgeschehens zur Verfügung.
Memberfunktionen
- BOOL DarfWuerfeln() – Gibt an ob
die Muscheln zur Zeit benutzt werden können und gibt die Möglichkeit
diese dann anders zu Zeichnen. Dazu wird DarfWuerfeln() vom aktuellen
Zustand aufgerufen.
- BOOL IstGewonnen() – Zeigt an, ob
das Spiel von einer Partei gewonnen wurde d.h. alle Figuren eines Teams
sind in ihrem entsprechenden Zielfeld angekommen
- BOOL IstSpielstartAktiv() – Gibt an, ob ein neues Spiel begonnen werden kann, also neue Spieler erstellt werden können
- CString* HoleSpielernamen() – Gibt
ein Array von vier CStrings zurück, die die Namen der Spieler in der
Reihenfolge gelb, schwarz, rot, grün enhält.
- void ErstelleSpieler(CString sGelb,
CString sSchwarz, CString sRot, CString sGruen) – Erstellt vier Spieler
mit den übergebenen Namen und startet ein neues Spiel. Dies ist nur
möglich, wenn IstSpielstartAktiv() wahr ist.
- uint HoleAktuellenSpieler() – Gibt
den Aktuellen Spieler zurück, der gerade an der Reihe ist (0 - Gelb, 1
- Schwarz, 2 - Rot, 3 - Rot, 4 -Grün).
- vector<CFeldStatus*>
HoleZuZeichnendeFelder() – Gibt einen Vektor von Kommunikationsklassen
zurück die Felder nennt, welche besonders angezeigt oder auf denen
Spielfiguren gezeichnet werden sollen.
- int HoleMuschelAnzahl() – Teilt einem die Anzahl der nach oben zeigenden Muscheln mit um diese eventuell grafisch darzustellen.
- int HoleAugenzahl() – Holt die
aktuell gewürfelte Augenzahl der Muscheln, das heißt die Anzahl der
Felder die ein Spieler gehen darf.
- BOOL IstGrace() – Gibt zurück ob
der Spieler zur Zeit ein Grace hat, also entweder am Anfang des Zuges
eine Figur in das Spiel bringen darf oder am Ende noch einen Zug hat.
- void FeldGeklickt(uint nID) – Teilt der Spiellogik mit, daß auf das Feld mit der ID nID geklickt wurde.
- void SkipAusgeloest() – Sagt dem
Dokument, daß der Spieler ein Skip ausgeloest hat bzw. auf einen
entsprechenden Button gedrückt hat.
- uint holeTeamGewonnen(void) – Gibt die Nummer des Teams zurück, das gewonnen hat
- CString* holeNachricht(void) – Gibt eine Statusmeldung zurück (z.B. “Würfeln nicht möglich”)
Membervariablen
- CZustand* m_pAktuellerZustand – Pointer auf den aktuellen Zustand.
- CSpielInfo m_cSpielInfo – Objekt
mit gekapselten Informationen über den aktuellen Stand des Spiels.
Zustände haben auch Zugriff auf dieses Objekt.
- CSpielbrett m_cSpielbrett – Das CSpielbrett Objekt, welches für die Auflösung der Feld IDs zu den Feldern zuständig ist.
- vector<CZustand*> m_pZustaende – Vector von allen vorhandenen Zuständen
CSpielInfo
Klasse zur Informationsspeicherung und Entlastung des Dokuments. Sie spielt eine zentrale Rolle und bietet
Informationen zum aktuellen Spielstatus.
Memberfunktionen:
- CSpielinfo(CSpielerErstellung*
pSpielerGelb, CSpielerErstellung* pSpielerSchwarz, CSpielerErstellung*
pSpielerRot, CSpielerErstellung* pSpielerGruen, uint nBeginner) –
Konstruktor der Klasse. Die wichtigen Parameter der Spieler werden
durch die Klasse CSpielerErstellung repräsentiert.
- CMuscheln* HoleMuscheln() – Gibt
einen Pointer auf die Muscheln zurück um damit zu würfeln oder die
aktuelle Augenzahl abzufragen.
- void SetzeAusgewaehltesQuellfeld(CFeld* pAusgewaehltesQuellfeld) – Setzt das aktuell als Quellfeld ausgewählte Feld
- CFeld* HoleAusgewaehltesQuellfeld() – Gibt das aktuell als Quellfeld ausgewählte Feld zurück
- CSpieler* HoleAktuellenSpieler() – Gibt den Spieler der gerade an der Reihe ist zurück
- void WechsleZuNaechstemSpieler() – Wechselt den aktuellen Spieler zum nächsten in der Reihe
- BOOL IstFigurGeschlagen() – Gibt
zurück ob der Spieler in seiner Runde eine Figur geschlagen hat und
somit nocheinmal würfeln darf
- CTeam* HoleTeam1() – Gibt einen Pointer auf das erste Team (Gelb/Schwarz) zurück
- CTeam* HoleTeam2() – Gibt einen Pointer auf das zweite Team (Rot/Grün) zurück
- void SetzeNachricht(CString sNachricht) – Setzt eine Nachricht die dem Spieler angezeigt werden soll
- CString HoleNachricht() – Gibt die letzte Nachricht zurück die dem Spieler angezeigt werden soll
Membervariablen:
- BOOL bFigurGeschlagen – Gibt an ob der Spieler in seiner Runde eine Figur geschlagen hat und somit nocheinmal würfeln darf
- CString m_sNachricht – Die
Nachricht, die dem Spieler angezeigt werden soll, sie wird vor beginn
einer Aktion (klick) zurückgesetzt
- CMuscheln m_cMuscheln – Die Muscheln unseres Spiels, mit ihnen wird gewürfelt und die letzte Augenzahl wird darin gespeichert
- CFeld* m_pAusgewaehltesQuellfeld – Das ausgewählte Quellfeld, von dem Figuren gezogen werden sollen
- CTeam* m_pTeam1 – Pointer auf das erste Team
- CTeam* m_pTeam2 – Pointer auf das zweite Team
- CSpieler* m_pAktuellerSpieler – Ein Pointer auf den Spieler der gerade an der Reihe ist
CSpielerErstellung
Diese Klasse beinhaltet alle wichtigen Informationen, um einen Spieler zu erstellen. Sie hat fünf öffentliche Attribute.
Membervariablen
- CString sName – Name des Spielers
- uint nFarbe – Farbe seiner Spielfiguren
- CStartfeld* pStartfeld – Zeiger auf das Startfeld dieses Spielers
- CZielfeld* pZielfeld – Zeiger auf das Zielfeld des Spielers
- CZielBurg* pZielburg – Zeigt auf die Brug des Spielers