Softwarepraktikum (Grundstudium):
Implementierung heuristischer Algorithmen für Brettspiele
Inhalt
Ziel des Praktikums ist die Implementation eines spielstarken Computerspielers für eine erweiterte Versions des Spiels Reversi. Während des Praktikums werden wir eine Rangliste der aktuellen Programme führen und abschließend im Rahmen eines Wettbewerbs einen Sieger küren.
Ansprechpartner
Stefan Rieger
Carsten Kern
Termine
- Praktikumsbesprechung: Mittwochs, 10:00 Uhr im Seminarraum (4201) des Lehrstuhls I2
- Fragestunde (Stefan Schulz): Freitags, 13:45 - 15:15 Uhr im Raum 4204 des Lehrstuhls I2
- Fragestunde (Michael Rohrbach): Dienstags, 16:00 - 17:30 im Raum 4204 des Lehrstuhls I2
Voraussetzungen
- Bestandene Vordiplomsklausur in Programmierung oder Datenstrukturen und Algorithmen
- Kenntnisse in Java, C oder C++
Übungsblätter und weitere Dateien
Binaries
Server
| Status |
Inhalt |
Version |
Plattform |
Zusatz |
| alt |
Server/Client |
1.0 |
x86
PPC(MacOS)
PPC(Linux)
|
- Network-Byte-Order: abhängig vom System
|
| alt |
Server/Client/AI |
1.1 |
x86
PPC(Linux)
|
- neue Kommandozeilen-Parameter
- Network-Byte-Order: big-endian
- Seg-Fault Problem behoben
|
| alt |
Server/Client/AI |
1.1.1 |
x86
x86_64
|
- server_nogl und ai nicht mehr von der glut-Bibliothek abhängig
- Spielfeld-Ausgabe (im Terminal) korrigiert
- einige Debug-Ausgaben entfernt
|
| alt |
Server/Client/AI |
1.1.2 |
x86
x86_64
PPC(Linux)
|
- neuer Kommandozeilen-Schalter -q erzwingt das Terminieren des Servers bei der opengl-Version
- Skript srv_auto_restart.sh ermöglicht den automatischen Neustart des Servers nach Spielende
- Fehler beseitigt, der ungültige Züge mit Überschreibsteinen erlaubte
|
| alt |
Server/Client/AI |
1.1.3 |
x86
x86_64
|
- Kommandozeilensyntax von client an die von ai angeglichen
- Bessere Statistiken von ai
- Abbruch der iterativen Tiefensuche von ai, falls Suche vollständig
|
| alt |
Server/Client/AI |
1.2 |
x86
x86_64
PPC(Linux)
|
- Zusätzlicher Parameter -o von server erlaubt die Vorgabe der Spielerreihenfolge der Clients. Diese werden anhand ihrer Gruppennummer sortiert (unabhängig von der Reihenfolge des Verbindungsaufbaus). -o erwartet als zweites Argument einen String aus {0,...,8}* (ohne Leerzeichen).
- ai sucht jetzt mit Zugsortierung (höhere Suchtiefen möglich)
|
| alt |
Server/Client/AI |
1.2.1 |
x86
x86_64
|
- Schwerwiegender Fehler in der Zugsortierung von ai wurde beseitigt
- Parameter -nosort von ai schaltet die Zugsortierung ab
|
| neu |
Server/Client/AI |
1.2.2 |
x86
x86_64
|
- Behandlung von Inversionssteinen in server, client und ai korrigiert
- Bewertung von negativen Endzuständen in ai geändert
|
Level-Editor:
| Status |
Inhalt |
Version |
Java-Version |
Zusatz |
| neu |
Level Editor |
2.0 |
Java 1.5
|
- graphisches Erstellen von Spielfeldern (gemäß Spezifikation)
- Ausführungsbefehl: java -jar Editor-v2.0.jar
|
Beschreibung
Das Spiel ist Client/Server-basiert, wobei der Server bereitgestellt wird und nicht zusätzlich zu programmieren ist. In geringem Umfang ist jedoch Netzwerkprogrammierung vonnöten. Im folgenden eine schematische Beschreibung des Spiels, wobei nicht sofort alle Aspekte implementiert werden müssen, sondern diese nach und nach in Teilaufgaben hinzugefügt werden.
Spielfeld
- Das Spielfeld ist in quadratische Felder unterteilt, die jeweils mit einem Spielstein besetzt werden können.
- Die Struktur des Spielfeldes ist variabel und wird vor jedem Spiel fest vorgegeben.
- Äußere Steinkanten können auf andere äußere Kanten verweisen, an denen die entsprechende Reihe fortgesetzt wird.
Spielablauf (Grundlage: Wikipedia)
- Das Spiel wird auf bis zu 8 Spieler erweitert.
- Spieler 0 beginnt; die Spieler ziehen der Reihe nach und setzen jeweils einen Stein auf das Spielfeld (falls möglich, s.u.).
- Ein Zug ist erlaubt, wenn ein Spieler Reihen gegnerischer Spielsteine (senkrecht, waagerecht oder diagonal) bzw. gegnerische Einzelsteine zwischen dem neu gelegten Stein und einem bereits vorhandenen eigenen Stein einschließt.
- Durch die Verweise sind zyklische Umschließungen erlaubt.
- Die Steine des Gegenspielers dürfen nicht über die eigenen hinweg eingeschlossen werden.
- Die umgefärbten Steine müssen in direkter Linie (über Verweise hinweg) zum gelegten liegen; nur die in direkter Folge eines Spielzuges eingeschlossenen Steine werden umgefärbt.
- Alle gegnerischen Spielsteine, die in Folge eines Spielzuges eingeschlossen werden, werden in die Farbe des ziehenden Spielers umgewandelt, selbst wenn dies für den Spieler von Nachteil ist.
- Wenn der aktuelle Spieler nicht mehr ziehen kann, ist das Spiel beendet. Die Plättchen werden gezählt
und der Spieler mit den meisten Steinen in seiner Farbe hat gewonnen.
- Ungültige Züge führen augenblicklich zu einer Disqualifikation des betreffenden Spielers und zum Spielende.
Spezielle Felder
- Inversionsfelder: Deren Belegung führt zu einer zyklischen Verschiebung der Farben (modulo n).
- Farbwahl-Felder: Belegt ein Spieler ein solches mit einem Stein, darf er die Farbe eines beliebigen anderen Spielers annehmen. Der andere Spieler muß die Farbe des aktiven Spielers übernehmen.
Spezielle Steine
- Überlagerungssteine: Diese Steine können auf existierende (auch eigene) Steine gesetzt werden und "überschreiben" diese. Die Auswirkungen sind die gleichen wie bei herkömmlichen Zügen. Überlagerungssteine können nur gesetzt werden, wenn sich eine Umschließung gegnerischer Steine ergibt (wie oben).
- Bomben: Können auf ein beliebiges (auch besetztes) Feld "geworfen" werden und zerstören dieses, d.h. das Spielfeld wird verändert. Es findet keine Umfärbung statt.
Schema
Mögliche Spielsituation:
Nach Zug von Weiß:

Nach Zug von Gelb:

CVS
Während des Praktikums werden wir das Versionsverwaltungssystem CVS verwenden.
|