Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/03161.jsonl.gz/904

ETH Zurich :
Computer Science :
Pervasive Computing :
Distributed Systems :
Education :
I2 SS2006
Reversi
Unser Reversi-Turnier hat am Mittwoch, 05.07.2006 im HG E3 stattgefunden. Ergebnisse gibt es hier.
Preise
Die Preise für die ersten drei Plätze des Turniers sind wie folgt:
1. Preis: iPod nano (!)
2. Preis: 100,- SFr. Büchergutscheine
3. Preis: 50,- SFr. Büchergutscheine
Am Ende des Turniers wird zusätzlich unter _allen_ Spieler-Einreichungen ein iPod shuffle verlost!
Wettkampfbedingungen
Technisch müssen die Programme die Bedingungen erfüllen, die im Laufe
der Übungen vorgegeben wurden. Die Spielqualität selbst hat keinen
Einfluss darauf, ob das Programm teilnehmen kann oder nicht. (Aber
natürlich aller Voraussicht nach auf die Platzierung.)
Selbstverständlich müssen die Reversi-Spielregeln eingehalten werden,
da sonst die Spieler disqualifiziert werden. Ausserdem wird ein
Mindestmass an Kooperation verlangt, um den technischen Ablauf eines
Spiels nicht zu gefährden: Zum Beispiel ist es nicht erlaubt,
die Rechenzeit des Gegners über weiterlaufende Threads zu beanspruchen.
Einsendungen
Wer selbst mit einem Programm teilnehmen möchte, sollte es bis
Sonntag, 02.07.2006 per Mail an <email-pii>
einreichen. Alle Programmteile müssen in Java geschrieben sein und
sowohl im Quellcode als auch als übersetzte Klassendateien abgegeben
werden. Einsendungen ohne vollständigen Quellcode können nicht
teilnehmen! Bitte sendet unter Angabe des Paket- und
Klassennamens den Quellcode zusammen mit den compilierten Klassen im
entsprechenden Unterverzeichnis in einem (tar-,
zip- oder gz-) Archiv. Nennt bitte in der E-Mail den Vor- und Nachnamen
der Autoren und tragt als Betreff ''Reversispieler'' ein.
Ermittlung des Siegers
Die genauen Wettkampfmodalitäten, also das System, nach dem der
Sieger ermittelt wird, hängen von der Anzahl der Teilnehmer ab und
werden vor Beginn des Turniers angekündigt. Typischerweise gibt es 2-4
(abhängig von der Anzahl der Einsendungen) parallel durchgeführte und
zufällig ausgeloste Vorrunden. Jeweils die Gruppensieger oder die zwei Gruppenersten
kommen in die Finalrunden. Den Autoren der besten Programme winken kleine
Sachpreise.
Die Vorrunden und die Finalspiele werden auf vier PCs / Notebooks
ausgetragen. Alle vier unterscheiden sich bezueglich Prozessortakt und
Speicherausbau. Die Fairness ist dennoch gewährleistet, da die beiden
Kontrahenten natuerlich auf ein und demselben Rechner ausgeführt
werden. Es ist aber wichtig, dass ihr Programm bzgl. des Zeitlimits
flexibel reagiert, sie können nicht davon ausgehen, dass die Computer
neueste Gigahertztaktraten erreichen, die Vorrunde könnte auch auf
einem langsameren Rechner stattfinden.
Die Zeit, die pro Zug zur Verfügung steht, beträgt 5
Sekunden. Wenn ein Programm dieses Limit überschreitet, gilt das
Spiel als verloren.
Regeln
Es gibt verschiedene Varianten dieses einfachen Spieles. Wir verwenden
die folgenden Regeln: .pdf
Reversi-Arena
Für das Turnier, haben wir ein Programm namens Arena
entwickelt, welches es ermöglicht, Reversi-Computerspieler
gegeneinander antreten zu lassen. Dieses Programm und weitere Klassen
für Ihre Computerspieler mit dazugehöriger Dokumentation befinden sich
in einem Paket, welches Sie bei sich lokal installieren müssen.
Installation
Wichtig: Stellen Sie auf jeden Fall sicher, dass ihre Java Version aktuell genug ist
(wir empfehlen die Version 1.4.2). Dies können Sie mit dem Befehl
java -version
überprüfen.
Falls Sie auf tardis (also in den D-ITET Rechnerräumen) arbeiten, müssen Sie
die verwendete Version manuell auswählen. Benutzen Sie hier statt
java
den Befehl
java-1.4.2_05 und anstatt
javac entsprechend
den Befehl
javac-1.4.2_05.
Laden Sie sich die neuste Version des Reversi-Paketes von dieser
Webseite (siehe Software Downloads unten). Wechseln Sie in ein
beliebiges Verzeichnis und entpacken Sie den Inhalt der Datei mit dem
Kommando gtar xvfz reversi-X.Y.tgz bzw. unzip
reversi-X.Y.zip (X und Y sind dabei mit der
entsprechenden (Unter-) Versionsnummer zu ersetzen).
Im aktuellen Verzeichnis befinden sich jetzt die Unterverzeichnisse
reversi, humanPlayer und javadoc. Das
Verzeichnis reversi enthält das Paket reversi mit
Klassen und Interfaces, die wir für alle weiteren Reversi-Aufgaben bis
zum Ende des Semesters benutzen werden. Es enthält weiterhin das
Program Arena, welches es erlaubt, die von Ihnen in dieser
und in zukünftigen Aufgaben entwickelten Reversi-Computerspieler
gegeneinander antreten zu lassen. Im Verzeichnis javadoc
befindet sich die Dokumentation
zum Reversi-Paket im HTML-Format.
Das Verzeichnis humanPlayer enhält einen
"Computerspieler" HumanPlayer, der seine Züge berechnet,
indem er sie über die Tastatur einliesst.
Testen Sie die Installation, indem Sie folgendes Kommando auf der
Kommandozeile eingeben:
java -classpath . reversi.Arena -t 0 IchGegenMich humanPlayer.HumanPlayer humanPlayer.HumanPlayer
Erzeugen Sie ein weiteres Unterverzeichnis mit einem Namen Ihrer Wahl
für Ihren eigenen Cumputerspieler.
Eigene Spieler
Damit es möglich wird, automatisch verschiedene
Reversi-Computerspieler gegeneinander antreten zu lassen, müssen die
von Ihnen zu Implementierenden Computerspieler gewisse Anforderungen
erfüllen.
Ihre Spielerklasse muss das Interface ReversiPlayer aus
dem Paket reversi implementieren. Wenn ein Computrspieler an
der Reihe ist, wird die Methode nextMove() aufgerufen. Sie
hat einen Parameter vom Typ GameBoard, der die aktuelle
Version des Spielbretts enthält. Geben Sie Ihren Zug in einem
Coordiantes-Objekt zurück. Die linke obere Ecke des
Spielfeldes entspricht Coordiantes(1,1), die rechte untere
Ecke Coordinates(8,8).
Die Arena erlaubt es, einen Computerspieler gegen sich
selbst spielen zu lassen. Achten Sie deshalb darauf, dass Ihre
Implementierung keine static-Attribute enthält, da diese
Attribute sonst für beide Instanzen (den roten und den grünen Spieler)
identisch sind!
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.
Zum Compilieren Ihres eigenen Spielers rufen Sie den Compiler wie
folgt auf:
javac -classpath . mypackage/*.java
Das setzt voraus, dass es ein Unterverzeichnis mypackage gibt!
Ein Spiel starten
Aufrufsyntax des Programms Arena:
java -classpath . reversi.Arena [options] GameName package1.myclass1 package2.myclass2
Der obige Aufruf startet ein Spiel zwischen zwei Computerspielern
package1.myclass1 und package2.myclass2. Dabei
bezeichnet myclassX die Klasse, die das Interface
ReversiPlayer implementiert. packageX bezeichnet das
Package, in dem die Spielerklasse implementiert ist.
GameName ist ein beliebiger Name für das Spiel. Der Name
wird beim Schreiben von Spielinformationen in eine Log-Datei
verwendet. Das erlaubt das spätere Wiederfinden von einzelnen Spielen
in einer Log-Datei, die mehrere Spiele
enthält.
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 Name der 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:
// eigene Klasse
package subway;
// import all classes from package
beisser
import beisser.*;
import beisser.tomorrow.*; // import all
classes from package beisser.tomorrow
// import class Cloud from package
phantasy
import phantasy.Cloud;
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 { ...
Software Downloads
Der Download ist zur Zeit nicht möglich. Für Fragen wenden Sie sich bitte an Silvia Santini
Literatur
Der Zugriff auf die unten angegebenen Dokumente ist passwortgeschützt. Bitte fragen Sie
Ihren Übungsgruppenleiter nach Benutzernamen und Passwort. Bei Problemen können Sie sich
an Silvia Santini wenden.