Prof. Franz Schweiggert Abteilung Angewandte Informationsverarbeitung 27. Januar 2003
Christian Ehrhardt Blatt 12


Uni Logo



Allgemeine Informatik 3 (WS 2002/2003)


Abgabetermin 10.02.2003

Vier gewinnt (20 Punkte+5 Zusatzpunkte)

Das Spiel

Das Spiel ``Vier gewinnt'' wird von zwei Spielern auf einem rechteckigen Spielfeld mit 6 Zeilen und 7 Spalten gespielt. Ein Spieler spielt mit weißen Spielsteinen, der andere mit Schwarzen. Ziel des Spiels ist es, 4 Steine der eigenen Farbe in einer Reihe (senkrecht, waagerecht oder diagonal) zu platzieren. Der erste Spieler, der dieses Ziel erreicht gewinnt sofort das Spiel. Dazu dürfen die einzelnen Spieler abwechselnd einen Stein der eignen Farbe auf dem Spielfeld platzieren. Einzige Einschränkung: Ein neuer Spielstein darf nur in das unterste freie Feld einer Spalte gesetzt werden.

Die Spielstände

Zu einem Spielstand gehören also die folgenden Informationen Damit läßt sich feststellen, wieviel Platz ein einzelner Spielstand benötigt, wenn man ihn in einer Datei abspeichern will. Weiterhin ist es dann möglich, mehrere Spielstände von verschiedenen Spielen hintereinader in einer einzigen Datei zu speichern. Da jeder eine feste Größe hat, kann ein bestimmter Spielstand mit Hilfe einer Nummer ausgewählt werden.

Ein erstes Programm (15 Punkte)

Nach diesen Vorüberlegungen soll nun ein erstes Programm geschrieben werden, das auf der Kommandozeile die folgenden Informationen mitgeteilt bekommt: Das Programm soll den durch die Nummer angegebenen Spielstand aus der Datei auslesen und ev. durch einen neuen Spielstand ersetzen. Dabei dürfen andere Spielstände in der selben Datei nicht verändert werden. Der neue Spielstand ergibt sich aus folgenden Regeln:

Named pipes

Mit Hilfe des Systemcalls mknod oder mit der Funktion mkfifo können im Dateisystem sogenannte FIFOs oder named pipes angelegt werden. Eine solche FIFO hat folgende Eigenschaften:

Ein richtiges Programm (5 Punkte)

Damit das Spiel vernünftig gespielt werden kann soll in einem nächsten Schritt mit Hilfe von named pipes eine Art Signalmechanismus geschrieben werden. Damit kann dem Programm des Spielpartners mitgeteilt werden, daß er jetzt am Zug ist. Das soll folgendermaßen funktionieren: Da read beim Lesen aus einer leeren FIFO blockiert, wird dadurch sichergestellt, daß immer abwechselnd Züge abgegeben werden, ohne daß beide Spielparteien nachsehen müssen, ob der Gegner inzwischen einen Zug abgegeben hat.
Hinweis: Beide Prozesse sollten die FIFO zum lesen und schreiben öffnen und während der gesamten Laufzeit der Programms geöffnet halten.

Locks (5 Zusatzpunkte)

5 Zusatzpunkte gibt es, wenn das Lesen und Schreiben in der gemeinsamen Datei, die die Spielstände enthält, durch lockf synchronisiert wird.

Christian Ehrhardt 2003-01-27