Software-Projekt: Mensch ärgere Dich nicht © 2009 LK

Werbung
Software-Projekt: Mensch ärgere Dich nicht
Dokumentation – Softwareprojekt: Mensch ärgere Dich nicht
Das Programm „Mensch ärgere Dich nicht“ ermöglicht das Spielen des gleichnamigen Spieles
über Netzwerke. Jeder Spieler verfügt dabei über einen Clienten, der auch das Spielfeld
darstellt. Die Verwaltung und Organisation des Spieles übernimmt dabei der Gameserver.
Es findet stets nur eine Kommunikation von Server zu Client und anders herum statt. Ein Client
weiß lediglich über die Anzahl der Mitspieler bescheid, nicht aber über deren Bezeichnungen
und kann diese auch nicht direkt addressieren und ihnen Daten übermitteln. Der
Datenaustausch findet mittels eines festgelegten Formates ([code,[information]], s.u.
(Referenz)) statt. Auf diese Weise werden Befehle und Spieldaten übermittelt. Die
Kommunikation wird über TCP realisiert.
Um eine Verbindung herzustellen, muss im Fenster des Clienten im Login-Eingabefeldes der
Hostname oder die IP eines Rechners eingegeben werden. Der Client baut dann TCPVerbindung zum Server, welcher auf dem TCP-Port 50008 lauscht, auf. Befindet sich auf
diesem Rechner ein Gameserver, der noch Anmeldungen zulässt, wird verbunden. Der Spieler
erhält dann als Login-Bestätigung die Nachricht „Viel Spaß!“ und die Spieleranzeige wird so
geändert, dass unter der Spielernummer, die einem selbst zugeordnet ist, „Das bist du. Bitte
warten.“ steht. Andernfalls wird eine Fehlermeldung ausgegeben und man kann es mit einer
anderen Adresse versuchen.
Die maximale Anzahl Clienten, die an einem Server angemeldet sein können, ist vier. Die
minimale Anzahl Clienten, die angemeldet sein müssen, um ein Spiel zu starten, ist 1. Dabei
wird die Anzahl der teilnehmenden Spieler beim Erstellen eines Servers festgelegt. Das Spiel
startet erst, wenn die Anzahl an Teilnehmer erreicht ist. Anstelle eines oder mehreren
menschlichen Spielern können auch KIs ausgewählt und gestartet werden. Diese erzeugen dann
selbstständig einen Clienten und steuern diesen automatisch nach einem festgelegten Muster.
Für andere Spieler erscheinen sie wie normale Spieler.
Es könnten theoretisch mehrere Gameserver auf einem Rechner laufen, praktisch treten dabei
aber Probleme auf. Es stellt jedoch kein Problem dar, einen Server und einen Clienten auf dem
selben Rechner laufen zu lassen. In diesem Fall ist der Server dann außer mit der IP-Adresse
noch über „localhost“ oder ein leeres Eingabefeld zugänglich.
Sobald das Spiel gestartet ist, sind die Spieler abwechselnd an der Reihe. Der Server wartet, bis
er Befehle vom Clienten, der zurzeit an der Reihe ist, erhält, und sendet daraufhin
entsprechende Daten bzw. Befehle an diesen oder an alle Clienten (siehe Referenz) zurück.
© 2009 LK-Informatik (Inf-2, LK16)
Software-Projekt: Mensch ärgere Dich nicht
1. Klassendiagramm
•
•
<<Client>>
CustomFeld (feld.py)
Definieren der ButtonKommandos (Versenden der
Codes)
Auslesen und verarbeiten der
eingehenden Codes
•
<<Client>>
Buffer (buffer.py)
Puffert Daten
•
<<Server>>
Gsgui (gsgui_ui.py)
Aufbau der Gameserver-GUI
•
<<Server>>
Brett (gameserver.py)
verwaltet Spielstand-Daten
•
<<Server>>
Buffer (buffer.py)
Puffert Daten
•
<<Client>>
Feld (feld_ui.py)
Aufbau der Spielfeld-GUI
•
•
<<Client>>
NetClient (client.py)
erzeugt Clienten
Empfangen und Versenden von Daten
<<Client>>
(IntelligenzKIOpt.py,
SichereIntelligenzKIOpt.py, SprinterKIOpt.py,
UnwahrscheinlichkeitsKIOpt.py)
• erzeugen computergesteuerte Clienten
(KIs)
•
•
•
<<Server>>
CustomGsgui (gsgui.py)
Definieren der Button-Kommandos
Aufrufen einer Gameserver-Instanz
Aufrufen von KI-Instanzen
•
<<Server>>
Spiel (gameserver.py)
berechnet/überprüft Spieldaten
•
•
•
<<Server>>
NetServer (server.py)
erzeugt Server
Empfangen und Verteilen der Daten
Verbindungsaufbau zw. Clienten
Die Pfeile zeigen, welche Klasse in welche importiert wird.
Bei den Buffer-Klassen wird die selbe Klasse importiert, aber verschiedene Instanzen erzeugt.
© 2009 LK-Informatik (Inf-2, LK16)
Software-Projekt: Mensch ärgere Dich nicht
2. Erklärung der Klassen
2.1. Netzwerk
Der Netzwerk-Teil des Programmes ermöglicht die Netztwerkverbindung und –kommunikation
zwischen Gameserver und Client (GUI).
2.1.1. Buffer (buffer.py)
Der Buffer ist ein Zwischenspeicher nach dem First-In-First-Out-Prinzip. Die Buffer-Klasse
enthält Methoden, um Daten an den Buffer anzufügen bzw. auszulesen und entfernen.
2.1.2. NetServer (server.py)
Die Klasse NetServer erzeugt einen Server. Die Klasse enthält Methoden, um
Verbindungen zu Clienten aufzubauen und zu schließen, sowie Methoden, um Daten zu
empfangen und an einen oder mehrere Clienten zu versenden.
Die Klasse erzeugt dafür einen Buffer.
2.1.3. NetClient (client.py)
Die Klasse NetClient erzeugt einen Clienten. Die Klasse enthält Methoden, um eine
Verbindung zu einem Server aufzubauen und zu beenden und Methoden, um Daten an
diesen Server zu senden bzw. von diesem zu empfangen.
Die Klasse erzeugt dafür einen Buffer.
2.2. Gameserver
Der Gameserver erzeugt zusammen mit dem NetServer einen Server. Der Gameserver
verwaltet die Spieldaten und organisiert den Ablauf.
2.2.1. Brett (gameserver.py)
Die Klasse Brett speichert die Daten des Spielstandes, d.h. auf welchen Feldern sich die
Spielfiguren befinden, etc. Im weiteren enthält die Klasse Methoden, um diese Daten
zurückzugeben oder zu überschreiben.
2.2.2. Spiel (gameserver.py)
Die Klasse Spiel verwaltet den Spielablauf und Daten wie den Würfel und den aktuellen
Spieler. Die Klasse enthält Methoden, um die Augenzahl des Würfels zu generieren,
Figuren zu setzen (auf dem Feld, in die oder in der Zone, aus dem Haus raus oder hins Haus
zurück) und den Spielablauf mit Befehlen (siehe Referenz) zu steuern.
Die Klasse ruft dazu Instanzen des NetServers und des Bretts auf.
© 2009 LK-Informatik (Inf-2, LK16)
Software-Projekt: Mensch ärgere Dich nicht
2.2.3. Gsgui (gsgui_ui.py)
Die Klasse Gsgui baut die Benutzeroberfläche zum Starten eines Gameservers auf. In ihr
werden die Bauteile wie z.B. die Buttons definiert und konfiguriert und ihre Position
festgelegt.
2.2.4. CustomGsgui (gsgui.py)
In der Klasse CustomGsgui werden die Kommandos der Buttons der GUI definiert und die
GUI gestartet.
Mithilfe der Gui wird eine Instanz der Klasse Spiel erzeugt.
2.2.5. KIs (IntelligenzKIOpt.py, SichereIntelligenzKIOpt.py, SprinterKIOpt.py,
UnwahrscheinlichkeitsKIOpt.py)
Die KIs sind kein eigentlicher Bestandteil des Gameservers, werden aber von diesem
gestartet. Die KIs rufen eine Instanz des Clients (ohne GUI) auf und steuern diesen nach
einem festgelegten Verhaltensmuster.
2.3. GUI
Die GUI erzeugt das Spielfenster. Zusammen mit dem NetClient bildet die GUI einen Clienten.
2.3.2. Feld (feld_ui.py)
Die Klasse Gsgui baut die Benutzeroberfläche des Clienten auf. In ihr werden die nötigen
Grafiken importiert und die Bauteile wie z.B. Buttons definiert und konfiguriert und ihre
Position festgelegt.
2.3.1. CustomFeld (feld.py)
Die Klasse CustomFeld enthält Methoden zum Steuern der Hintergrundmusik, zum
Anmelden bei einem Server, zum Auslesen der empfangenen Daten, zum Enablen und
Disablen mehrerer Buttons, zum Aktualisieren der Spieldaten, definiert die Kommandos der
Buttons (siehe Referenz) und führt die GUI aus.
Dazu ruft die Klasse eine Instanz des NetClients auf.
© 2009 LK-Informatik (Inf-2, LK16)
Software-Projekt: Mensch ärgere Dich nicht
3. Referenz
Der Server und die Clienten schicken Daten in der Form [code,[informationen]]. Dabei ist code
bei Daten, die vom Client an den Server geschickt werden, mit einer Zahl von 0 bis 10
nummeriert und Daten, der der Server an die Clienten schickt, haben eine Zahl von 50 bis 55.
Die Daten werden in den Methoden i.d.R. als data übergeben.
Daten, deren Bezeichnung in der Tabelle mit einem Sternchen (*) gekennzeichnet sind, werden
an alle Clienten gleichzeitig geschickt. Ohne Sternchen erhält nur der Client des aktuellen
Spielers diese Daten (betrifft nur Daten, die vom Server geschickt werden.
[code,[information]]
[0,[]]
[1,[]]
[2,[augenzahl]]
Bezeichnung
aus
wuerfel_rollen
wuerfel_sehen*
[3,[spielernummer,[zone0, zone_sehen*
zone1, zone2, zone3]]
[4,[spielernummer,
figurenanzahl]]
haus_sehen*
[5,[feld0,feld1,...,feld47]] spielfeld*
[6,typ,[feldnummer]]
zug_falsch
[7,[]]
hausakt
[8,[spielernummer]]
beendet*
[9,[spielernummer]]
dran*
[10,[?]]
buttonakt
[50,[]]
[51,[feldnummer]]
fertig
zug_machen
[52,[]]
[53,[spielernummer]]
wuerfeln
haus_setzen
© 2009 LK-Informatik (Inf-2, LK16)
Effekt/Erklärung
Buttons des Spielers werden disbaled.
Der Würfel wird enabled.
Der Würfel wird aktualisiert.
augenzahl entspricht der neuen Augenzahl
des Würfels.
Die Zone des Spielers mit der spielernummer
wird aktualisiert.
Für zone0 bis zone4 steht jeweils eine Zahl
von 0 is 4 (entsprechend der Referenz, s.u.).
Das Haus des Spielers mit der spielernummer
wird aktualisiert.
Dabei entspricht figurenanzahl der Anzahl
der Figuren inm Haus.
Aktualisiert das Spielfeld.
Für feld0 bis feld47 steht jeweils eine Zahl
von 0 bis 4 (entsprechend der Referenz, s.u.).
Das Feld mit der Nummer feldnummer wird
disabled.
Ist typ eine 51, handelt es sich um ein Feld
des Spielfeldes, ist typ eine 54, handelt es
sich um ein Zonenfeld des aktuellen Spielers.
Das Haus wird enabled. alle anderen Felder
werden disabled.
Die Statusanzeige wird aktualisiert. Die
Verbindung zum Server wird getrennt.
spielernummer ist die Nummer des Spielers,
der gewonnen hat.
Die Hintergrundfarbe der Statusanzeige wird
auf die Farbe des Spielers mit der
spielernummer geändert.
Alle Feld-Buttons, die für den Spieler
verfügbar sind (d.h. alle Felder außer den
Häusern und Zonen der gegnerischen Spieler)
werden enabled.
Zug beendet, nächster Spieler
Prüfen und ggf. Setzen der Figur, die sich auf
dem Feld mit der feldnummer befindet.
Augenzahl des Würfels wird generiert.
Prüfen und ggf. Setzen einer Figur aus dem
Software-Projekt: Mensch ärgere Dich nicht
[54,[zonenfeldnummer]]
zone_setzen
[55,[]]
neues_spiel
Haus des Spielers mit der spielernummer auf
den Pott.
Prüfen und ggf. Setzen der Figur, die sich auf
dem Zonenfeld mit der zonenfeldnummer
befindet.
Die Farbe der Zone ist die selbe wie die des
aktuellen Spieler.
Ein neues Spiel mit den selben Spielern und
dem selben Server wird gestartet.
Die Felder des Spielfeldes sind mit 0 bis 47 nummeriert, die Zonenfelder mit 0 bis 3, wobei 3
nirgends übergeben oder versendet wird, da 3 nicht mehr gesetzt werden kann (letztes Feld).
Die Zuordnung der Farben ist folgendermaßen:
(leer = 0)
Gelb = 1
Grün = 2
Rot
=3
Blau = 4
© 2009 LK-Informatik (Inf-2, LK16)
Software-Projekt: Mensch ärgere Dich nicht
4. Erklärung der GUI
Spielfigur
Pott
Haus
Spieleranzeige
Login-Bereich
Statusanzeige
Würfel
Zonenfeld
Zone
Feld des Spielfeldes (alle Felder
außer Häuser und Zonen)
© 2009 LK-Informatik (Inf-2, LK16)
Herunterladen