Termine:

-          Ausgabe der Aufgabenstellung war der 01.04.07

-          mein Bearbeitungsbeginn: 03.06.07 (damit seht wohl fest, das ich nur als Vorbereitung für das nächste Praktikum sehe)

-          Abgabetermin: 13.08.07

 

Anforderungen:

-          das Programm muss mit den Standartbibliotheken von Java Version 5 (Java 1.5) laufen, für die grafische Oberfläche ist SWING zu verwenden

 

Spielregeln:

-          Brettspiel für zwei Personen

-          das Spielfeld besteht aus sechseckigen Feldern. Die Größe soll frei wählbar sein.

-          es gibt schwarze und weiße Chips, jeder Spieler hat eine Farbe, es gibt genügend Chips das Spielfeld abzudecken

-          Bei jedem Spielzug platziert der Spieler einen Chip seiner Farbe

-          Das Spiel beginnt mit einem leeren Spielbrett

-          Spieler A setzt weiße Steine und beginnt. Es kann den Chip in ein beliebiges Feld setzten (nicht auf die Kanten oder die Ecken).

-          Spieler B setzt schwarze Chips. Ab dem zweiten Zug dürfen nur noch Felder belegt werden, die eine Seite mit einem bereits belegten Feld beliebiger Farbe gemeinsam haben

-          Steine dürfen auf dem Spielfeld nicht verschoben werden, gelegte Steine dürfen nicht entfernt werden

-          sobald fünf Steine in einer Gerade liegen ist das Spiel beendet und die Farbe hat gewonnen. Sind alle Spielfelder belegt und es gibt keine Reihe von fünf gleichen Steinen, ist das Spiel unentschieden

 

Das Spielfeld:

-          die x-Felder sind in aufeinander folgenden Zeilen jeweils versetzt

-          gerade und ungerade y-Zeilen haben gleich viele x-Felder

 

Anforderungen:

-          Computergegner mit mindestens zwei unterschiedlichen Strategien (unterschiedliche Methoden der Stellungsbewertung)

-          Zuggenerator zum Spiel über Netzwerk (Nutzung der fremden Berechnung)

-          mögliche Paarungen:

1.      Mensch – Mensch,

2.      Mensch – Computer,

3.      Computer – Computer

4.      Mensch – Zuggenerator (Computer entfernt)

5.      Computer (lokal) – Zuggenerator

6.      Zuggenerator – Zuggenerator

-          bei Spiel ohne Mensch, „angenehme“ Geschwindigkeit

-          Spielbrettgröße: 8x8, 10x10, 15x15, 20x20, frei wählbar (auch nichtquadratisch)

-          wählbare Parameter für Zuggenerator: Netzwerkadresse, Portnummer, Denktiefe für Zugbewertung, Strategie (0 od. 1)

-          grafische Oberfläche mit SWING:

menschliche Spielzüge durch Klicken auf Felder
Menü neues Spiel starten

Menü Spiel beenden

Zugvorschlag abrufen (Zug blickt)

Zuggenerator: Denktiefe einstellbar

neues Spiel à Dialog mit Brettgröße, Spieler, ...

am Ende Anzeige, des Gewinners z.B. durch Blinken

 

Computergegner:

-          Spielbaum, wobei die Knoten die Spielsituationen sind

-          drei Elemente: Berechnung aller möglichen Züge, Traversierung des Spielbaums, Bewertung der Stellungen

-          bestimmte Denktiefe (bewertete Züge im Voraus) entspricht Schwierigkeit

-          Zugbewertung: Rückgabewert bei Vorteil A als positive Zahl (je größer desto besser), entsprechend bei Vorteil B negative Zahl, ausgeglichen gleich Null

-          Methode darf nur die momentane Situation bewerten, keine Folge von Spielzügen

-          Vorgehen:

1.      Ermitteln aller legalen Züge

2.      falls legale Züge existieren, wird für jeden dieser Züge die entsprechende Stellung generiert, die Methode ruft sich dann selbst auf, und generiert den nächsten Zug aus Sicht des anderen Spielers

3.      ist die maximale Denktiefe Erreicht, wird die Stellung bewertet

4.      ist die Stellung besser als die bisherige, wird der Wert und die Stellung gespeichert

5.      sind alle Züge durchprobiert, ist der Beste gefunden

6.      gibt es keine legalen Züge, ist Null die Rückgabe

-          Bewertung der Züge nach dem Minimax-Prinzip à Aufgabe S. 9

 

Zuggenerator:

-          beim Start des Programms soll ein Zuggeneratorserver gestartet erden, der einen Computergegner über das Netzwerk zur Verfügung stellt

-          Implementierung über ServerSockets, beim Aufbau einer Verbindung wird ein neuer Thread gestartet

-          die Portnummer soll frei wählbar sein

-          die Anzahl der mit dem Server verbundenen Clients ist nicht begrenzt

-          Kommunikation über SHP „Simple Hexabang Protokoll“ (zeilenorientierter ASCII-Text)

-          zum Schreiben nicht println verwenden, sondern /n als einzelnes Byte

-           

 

Für unsere Hexabang-Aufgabe lassen sich vier „große“ Bereiche ausmachen:

-          das Spielbrett, welches eine Spielstellung grafisch darstellt

-          der Rest der Swing-GUI: Hauptfenster, Dialoge, Bedienelemente

-          die Zuggenerierung mit Hilfe des Alpha-Beta-Algorithmus

-          die Kommunikation zwischen Client und Server über das Hexabang-Protokoll