ETH Zurich :
Computer Science :
Pervasive Computing :
Distributed Systems :
Education :
I2 SS2002
Reversi
Das Turnier
Im Rahmen der Informatik II-Vorlesung führen wir jedes Jahr ein Turnier
mit selbstgeschriebenen Reversi-Programmen durch. Hier sind die Ergebnisse der
letzten Jahre:
3. Juli 2002
2. Juli 2001
Regeln
Verschiedene Varianten dieses einfachen Spiels sind möglich. Wir
verwenden diese Regeln: .ps .pdf
Java Reversi Monitor
Der Monitor ermöglicht es, Reversi-Programme gegeneinander spielen zu
lassen. Wir gehen hier davon aus, dass die Spieler in einem Package
"package1" bzw. "package2" definiert sind. Es kann auch package1 ==
package2 sein und man kann den gleichen Spieler gegen sich selbst
spielen lassen (es werden dann zwei Instanzen der Spielerklasse
erzeugt; dabei ist darauf zu achten, ob static -Felder
verwendet werden-das sollte möglichst vermieden werden).
Installation
In ein beliebiges Verzeichnis wechseln, wo man das reversi-Paket und
seine eigenen Klassen ablegen möchte. Download des aktuellen
reversi-Package (ZIP-Datei, siehe unten) und auspacken mit
unzip reversi-complete-1.1.zip
Im aktuellen Verzeichnis befindet sich jetzt ein Unterverzeichnis
"reversi".
Eigene Spieler
Eine eigene Spielerklasse muss das Interface "ReversiPlayer"
implementieren. Wenn ein neuer Zug ausgeführt werden soll, wird die
Methode "nextMove" aufgerufen mit einem Spielbrett als Parameter, das
die aktuelle Situation enthält. Es ist günstig, die aktuelle
Spielsituation in eine eigene Instanz des Spielbretts zu kopieren, um
dort die eigenen Probe-Züge auszuführen. Dafür kann man die
Spielbrett-Klasse "TextGameBoard" aus dem Package "reversi" verwenden,
wenn man keine eigene Spielbrett-Klasse schreiben möchte.
Die TextGameBoard-Klasse ist ein wenig dokumentiert.
Zum Compilieren des eigenen Spielers den Compiler wie folgt aufrufen:
javac -classpath reversi/build/classes:. mypackage/*.java
Das setzt voraus, dass es ein Unterverzeichnis "mypackage" gibt!
Ausführen
Aufruf des Monitors (am besten in eine Batch- oder Shell-Datei schreiben):
java -classpath reversi/build/classes:reversi/lib:. reversi.Arena [options] mygame package1.myclass1 package2.myclass2
Hier ist "mygame" eine beliebige Bezeichnung für das Spiel. Das
erlaubt das spätere Wiederfinden von Spielen. "package1.myclass1" und
"package2.myclass2" bezeichnen die beiden Klassen, die die Spieler
implementieren.
Folgende Optionen können verwendet werden:
-? Hilfe anzeigen
-t timeout Zeit in Millisekunden, die jeder Spieler brauchen darf
-d delay Verzögerung zwischen Zügen; wichtig nur zur Animation
-e exittime Verzögerung, bis das Programm nach Spielende stoppt
-l logfile Log-Datei für das Protokollieren des Spiels
-s keine graphische Oberfläche anzeigen
Tipps
- Die Klassen in einem Package müssen immer in einem Verzeichnis liegen, das den gleichen Namen wie das Package hat. Die Klassen eines Package p müssen also im Verzeichnis p liegen.
- Im Klassenpfad (-classpath) muss das Verzeichnis oberhalb von p angegeben werden, damit das Package (Verzeichnis) p gefunden wird. Beispiel: im Verzeichnis
/usr/james/java/beisser liegt das Package beisser . Als Klassenpfad muss dann angegeben werden -classpath /usr/james/java .
- In eine Java-Klasse, die Klassen aus einem anderen Package benutzt, müssen diese Klassen per
import eingeführt werden. Beispiel:
package subway; // eigene Klasse
import beisser.*; // import all classes from package beisser
import beisser.tomorrow.*; // import all classes from package beisser.tomorrow
import phantasy.Cloud; // import class Cloud from package phantasy
public class Subway extends Cloud { ...
- Statt Packages zu importieren, kann man im Code auch jedesmal den vollen Klassennamen angeben, z.B.
public class Subway extends phantasy.Cloud { ...
Literatur
Kai-Fu Lee, Sanjoy Mahajan: The Development of a World Class Othello Program, Artificial Intelligence 43 (1990)
Hardcopies available on request
Einführung in die Spieltheorie (educETH, 1999) [lokale Kopie]
|