Dr. Matthias Grabert Abteilung Angewandte
Informationsverarbeitung 14. Juni 2002
Christian Ehrhardt Blatt 8
Systemnahe Software (SS 2002)
Abgabetermin 25.06.2002
In diesem Blatt soll ein Server für das Zweipersonenspiel Kalaha
geschrieben werden. Der Server wartet zunächst auf zwei Verbindungen,
je eine für jeden Spieler. Anschließend wird einer der Spieler zur
Abgabe eines Zuges aufgefordert. Nach jedem Zug wird beiden Spielern der
aktuelle Spielstand mitgeteilt und der Spieler, der an der Reihe ist,
wird zu einem neuen Zug aufgefordert. Wenn das Spiel beendet ist, wird
beiden Spielern der Endstand mitgeteilt und die Verbindungen werden
beendet. Außerdem soll es für einen Spieler auch möglich sein,
statt einem Zug das Spiel aufzugeben. Ebenso sollte der Server das
Spiel im Falle eines Fehlers abbrechen können.
Mit zur Aufgabe dieses Blattes gehört es auch, ein Protokoll
für die Kommunikation zwischen Spieler und Spieleserver zu
entwerfen. Außerdem muß der Server natürlich immer den neuen
Spielstand berechnen und entscheiden, wer nun an der Reihe ist.
Testen läßt sich das Spiel dann mit Hilfe von nc oder telnet als
Client. Behaltet beim Entwurf des Protokolls im Hinterkopf, daß
es nicht nur von Menschen, sondern auch von einem Computerprogramm
leicht lesbar sein soll.
- Spielbrett
- Kalaha wird auf einem Holzbrett gespielt,
das aus insgesamt 14 Mulden (Vertiefungen) besteht. Die Mulden A1 bis
A7 gehören Spieler A, die Mulden B1 bis B7 gehören Spieler B.
In jeder Mulde können Spielsteine liegen. Die Mulden sind wie
folgt angeordnet:
|
B6 |
B5 |
B4 |
B3 |
B2 |
B1 |
|
B7 |
|
|
|
|
|
|
A7 |
|
A1 |
A2 |
A3 |
A4 |
A5 |
A6 |
|
- Startaufstellung
- Zu Beginn des Spiels liegen
in jeder der Mulden A1 bis A6 und B1 bis B6 je 6 Spielsteine,
die Mulden A7 und B7 sind leer.
- Ende und Ziel
- Das Spiel ist beendet, wenn alle Spielsteine
sich in den Mulden A7 und B7 befinden, gewonnen hat derjenige Spieler,
der mehr Steine in seiner eigenen Mulde ansammeln konnte.
- Ein Zug
- Ein Zug eines Spielers besteht darin, daß er eine
seiner eigenen Mulden leert (A7 bzw. B7 sind nicht erlaubt) und die
Steine in die Mulden verteilt, die im Gegenuhrzeigersinn (mathematisch
positiv) auf die
geleerte Mulde folgen. Je ein Stein pro Mulde. Ausnahme: Spieler
A läßt die Mulde B7 aus, Spieler B läßt die Mulde A7 aus.
- Landet der letzte Stein in der Mulde A7 bzw. B7 ist der selbe
Spieler nochmal an der Reihe.
- Wenn der letzte Stein in einer der anderen eigenen Mulden
(A1 bis A6 bei Spieler A bzw. B1 bis B6 bei Spieler B) landet
und wenn dieser letzte Stein dann der einzige Stein in dieser
Mulde ist, dann wird dieser Stein und alle Steine aus der
gegenüberliegenden Mulde in die eigene 7er Mulde (A7 bzw. B7)
gelegt. Danach ist der Gegner an der Reihe.
- Gegenüberliegend sind dabei A1 und B6, A2 und B5, A3 und B4
usw.
- In allen anderen Fällen passiert nichts weiter und der
Gegner ist an der Reihe.
- Kein Zug möglich
- Falls ein Spieler keinen Zug mehr machen kann,
weil alle seine Mulden leer sind, kommen alle verbliebenen Steine
aus den Mulden des Gegners in die 7er Mulde des Gegners. Es ist nicht
erlaubt auf einen Zug zu verzichten.
- Es reicht aus, wenn Euer Server nach dem Start ein einziges
Spiel abhandelt und dann terminiert.
- Die ``Spielmechanik'' habe ich weitgehend schonmal für Euch
implementiert. Die beiden Dateien kalaha.c und kalaha.h gibt es
bei den Beispielen herunterzuladen.
Christian Ehrhardt
2002-06-14