Zusammenfassung des Systempraktikums zur Entwicklung eines Neunermühle-Clients
Überblick
Dieses Dokument fasst die Anforderungen und Vorgaben für die Entwicklung eines Clients für das Spiel Neunermühle im Rahmen des Systempraktikums der Ludwig-Maximilians-Universität München zusammen. Der Client soll in der Programmiersprache C entwickelt werden und mit einem bereitgestellten Gameserver sowie einem Webinterface interagieren.
Projektphasen
Das Systempraktikum ist in zwei Hauptphasen unterteilt:
- Prolog: Beitritt zum Spiel und Austausch von Spielinformationen.
- Spielverlauf: Verwaltung des Spiels, einschließlich Idle-Zeiten, Zügen und Spielende.
- Spielzug: Übermittlung und Verarbeitung von Spielzügen.
Systemkomponenten
Gameserver
- Implementiert den Spielablauf und fungiert als Spielleiter.
- Verantwortlich für die Einhaltung der Spielregeln.
- Stellt eine zeilenorientierte TCP-Verbindung zur Verfügung.
Webinterface
- Zugang unter http://sysprak.priv.lab.nm.ifi.lmu.de.
- Ermöglicht die Verwaltung von Partien.
- Bietet die Möglichkeit, als menschlicher Mitspieler an Partien teilzunehmen (Beobachter oder Mitspieler).
- Nur über das MWN1-Netzwerk erreichbar (z.B. via SSH-Tunnel).
Clientarchitektur
Der zu entwickelnde Client besteht aus zwei Prozessen:
-
Thinker
- Berechnet den nächsten Spielzug.
- Empfängt Signale vom Connector und liest Informationen aus dem gemeinsamen Speicherbereich.
- Sendet das berechnete Spielzug-Ergebnis über eine unnamed Pipe an den Connector.
-
Connector
- Verantwortlich für die Kommunikation mit dem Gameserver.
- Verarbeitet Anfragen vom Gameserver und teilt Informationen dem Thinker mit.
- Sendet berechnete Spielzüge an den Gameserver.
Übersicht der Client-Komponenten
Thinker Connector
Spielfeld / Infos
Shared Memory
Bereich
(Pipe)
Übertragung Spielzug
Denkanstoß
(Signal)
TCP Verbindung
zum Server
Kommunikationsprotokoll
Der Client kommuniziert mit dem Gameserver über ein zeilenorientiertes TCP-Protokoll. Jede Zeile endet mit einem Newline-Zeichen (\n
).
Verbindungsdetails
- Hostname:
sysprak.priv.lab.nm.ifi.lmu.de
- Port:
1357
(TCP)
Antwortkennzeichen
- Positive Antwort: Zeile beginnt mit
+
- Negative Antwort: Zeile beginnt mit
-
gefolgt von einer Fehlermeldung. Anschließend wird die Verbindung getrennt.
Protokollphasen
- Prolog
- Spielverlauf
- Spielzug
1. Prolog
-
Verbindungsaufbau:
- Server:
+ MNM Gameserver <Version> accepting connections
- Client:
VERSION <Client Version>
- Server:
+ Client version accepted - please send Game-ID to join
- Client:
ID <Game-ID>
- Server:
+ PLAYING <Gamekind-Name>
+ <Game-Name>
- Client:
PLAYER [[ Gewünschte Mitspielernummer ]]
- Server:
+ YOU <Mitspielernummer> <Mitspielername>
+ TOTAL <Mitspieleranzahl>
- Für jeden Mitspieler:
+ <Mitspielernummer> <Mitspielername> <Bereit>
+ ENDPLAYERS
- Server:
-
Versionierung:
- Major-Versionsnummern müssen übereinstimmen (z.B.,
v2.x
). - Inkompatible Versionen führen zum Abbruch.
- Major-Versionsnummern müssen übereinstimmen (z.B.,
-
Spielart:
Gamekind-Name
mussNMMorris
sein, sonst Abbruch mit Fehlermeldung.
2. Spielverlauf
Enthält drei mögliche Befehlssequenzen:
2.1 Idle Befehlssequenz
- Server:
+ WAIT
- Client:
OKWAIT
Hinweis: WAIT
-Befehle müssen regelmäßig bestätigt werden, sonst wird die Verbindung getrennt und die Partie als verloren gewertet.
2.2 Move Befehlssequenz
-
Server:
+ MOVE <Maximale Zugzeit>
+ CAPTURE <Anzahl zu schlagender Steine>
+ PIECELIST <Anzahl Mitspieler>,<Anzahl Steine>
-
Für jeden Spielstein:
+ PIECE<Mitspielernummer>.<Steinnummer> <Position>
-
Ende der Liste:
+ ENDPIECELIST
-
Client:
THINKING
-
Server:
+ OKTHINK
Anforderungen:
- Berechnung des Spielzugs innerhalb der angegebenen maximalen Zugzeit unter Berücksichtigung der Verbindungs-Latenz.
- Positionsangaben der Spielsteine:
A
: VerfügbarA0
-C7
: Auf dem Feld positioniertC
: Geschlagen
2.3 Game Over Befehlssequenz
-
Server:
+ GAMEOVER
+ PIECELIST <Anzahl Mitspieler>,<Anzahl Steine>
-
Für jeden Spielstein:
+ PIECE<Mitspielernummer>.<Steinnummer> <Position>
-
Ende der Liste:
+ ENDPIECELIST
-
Server:
+ PLAYER0WON <Yes|No>
+ PLAYER1WON <Yes|No>
+ QUIT
Hinweise:
- Spiel kann in einem Sieg, einer Niederlage oder einem Unentschieden enden.
- Nach
QUIT
wird die Verbindung vom Server abgebaut.
3. Spielzug
- Client:
PLAY <Spielzug>
- Server:
+ MOVEOK
Spielzug-Format:
- In der ersten Phase: Name des Zielfeldes (z.B.,
A1
) - Bei CAPTURE: Feld des zu schlagenden Steins (z.B.,
B4
) - Bei Ziehen/Springen:
Von:FeldZu
(z.B.,A1:B4
)
Fehlerbehandlung:
- Ungültige Spielzüge führen zu einer Fehlermeldung und Trennung der Verbindung.
Bugreports
- Fehlermeldungen: Meldung unter https://gitlab.lrz.de/sysprak/frontend/issues unter Verwendung der passenden Meldevorlage.
- Organisatorische Anliegen: Kontakt per E-Mail an
sysprak-admin@nm.ifi.lmu.de
.
Zusätzliche Ressourcen
- MWN Informationen: http://www.lrz.de/services/netz/
- SSH Informationen: https://www.rz.ifi.lmu.de/infos/ssh_de.html
- Spielregeln: http://sysprak.priv.lab.nm.ifi.lmu.de/help/
Diagramme
- Abbildung 1: Übersicht über den Client
- Abbildung 2: Protokollübersicht
Hinweis: Die Abbildungen sind in der Original-PDF enthalten und bieten eine visuelle Darstellung der Clientstruktur und des Kommunikationsprotokolls.