Small logo of ETH main building 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]

ETH ZurichDistributed Systems Group
Last updated June 20 2023 01:45:13 PM MET hv