Alle Leute, die beim ersten Workshop noch nichts vorgestellt haben, sollten sich diese To-do-Liste anschauen und eine der Aufgaben übernehmen!
Das sind Theresa, Pauline, Kai, Tobias, Fenzki.
Theresa hat bereits eine Rahmen für eine RandomAI geschrieben, von der die richtige KI abgeleitet werden kann.
Entscheidet am besten heute (Montag) noch, was ihr übernehmt und lest euch in die Vorgaben ein (zu finden auf der CoMa Projekt-Seite: AI.zip, server.zip und Workshop2.zip!)
ToDo-Liste für 2. Workshop:
1. Das ClientHiveInterface ist von einer Klasse zu implementieren, und muss aus der GameFactory erzeugbar sein. Das ClientHiveInterface hat 4 neue Methoden mehr als das HiveInterface.
- getName gibt den Namen des Spiels auf dem Server zurück. Diesen Namen bekommt man bei der Erzeugung in der Game Factory.
- introduceLocal / moveLocal werden von der Netzwerk-Komponente aufgerufen, wenn ein anderer Client einen Zug gemacht hat, und der Server euch diesen mitteilt. Abhängig von eurer Implementierung können diese Methoden eventuell dasselbe machen wie die bereits vorhandenen. In jedem Fall bieten euch die unterschiedlichen Aufrufsarten eine Möglichkeit zu testen, woher der Aufruf kommt.
2. Die Replay-Funktionalität der GUI kann genutzt werden.
- Wenn ihr einen Server startet, protokolliert er alle Spiele und legt sie in einem replay-Ordner im Verzeichnis seiner JAR an.
- Die Replays kann die GUI öffnen (siehe Button in der Toolbar). Die GUI erzeugt dann ein Modell über die GameFactory (d.h. eine Instanz eurer Modellklasse) und fährt dann die Züge aus, die im Replay drin stehen. Möchtet ihr die "Zurück"-Tasten nutzen, muss euer Modell auch die Methoden für die Rücknahme implementiert haben.
3. Eine KI schreiben, die die gestellte KI in 80% der Spiele schlägt. Ihr habt hierfür ein paar Vorgaben, die ihr als Hilfestellung nehmen könnt, aber nicht müsst.
- RandomMain ist die Start-Klasse der KI, die ihr bekommen habt. Sie verarbeitet die Kommandozeilenparameter und erzeugt mittels der Methode
ai(InetAddress server, int port, String login, String password, String game, PlayerColor color)
eine KI, die sich mit dem angegebenen Server verbindet, und dem angegebenen Spiel beitritt bzw. es erzeugt. Prinzipiell könnt ihr einfach den Inhalt der ai-Methode ersetzen, um eure AI aufzurufen.
- Damit ihr die Nachrichten des Servers nicht selbst übersetzen müsst, steht euch ein ServerHandler (client.network.ServerHandler) zur Verfügung. Dieser wird mit IP und Port des Servers und einem ServerListener (client.network.ServerListener) erzeugt. Der Handler übersetzt dann die Nachrichten des Servers in Methodenaufrufe, d.h. er ruft bei dem übergebenen ServerListener die passenden Methoden auf.
- Die Methoden des ServerListeners müssen dazu von einer Klasse implementiert werden. Als Vorlage könnt ihr die Klasse HiveAI betrachten. Diese Klasse ist die Implementierung der gestellten KI des Server Interfaces, und ihr *könnt* die Methoden daraus als Vorlage verwenden, müsst aber nicht. Ihr dürft aber Code aus dieser Klasse kopieren oder modifizieren, wenn ihr möchtet. Interessant für euch sind dabei unter anderem die gameCreated, gameOver, joinGame, awaitLogin, startGame Methoden. Da ihr hier komplette Klasse aus unserer KI bekommt, enthält die HiveAI Klasse einige Dinge, die ihr nicht habt, wie z.B. das AIInterface. Das ist für euch an der Stelle aber nicht so interessant.
- Wenn eure KI einen Zug macht (oder ihr im Client an der GUI einen Zug macht), müsst ihr dies dem Server mitteilen. Dafür steht euch die Klasse client.network.ServerCommand zur Verfügung. Wenn ihr in der GameFactory eure Instanz eines ClientHiveInterface erzeugt, bekommt ihr ein ServerCommand von der GUI übergeben, was ihr nutzen könnt, um die Züge der GUI an den Server weiterzuleiten. Für die KI könnt ihr euch ein ServerCommand zu eurem ServerHandler erzeugen, in dem ihr new ServerCommand(<ServerHandler>) benutzt. Das ServerCommand erlaubt euch dann, Spielen beizutreten, starten, etc. und Züge an den Server zu senden.
[b]
Das sind Theresa, Pauline, Kai, Tobias, Fenzki.
Theresa hat bereits eine Rahmen für eine RandomAI geschrieben, von der die richtige KI abgeleitet werden kann.
Entscheidet am besten heute (Montag) noch, was ihr übernehmt und lest euch in die Vorgaben ein (zu finden auf der CoMa Projekt-Seite: AI.zip, server.zip und Workshop2.zip!)
ToDo-Liste für 2. Workshop:
1. Das ClientHiveInterface ist von einer Klasse zu implementieren, und muss aus der GameFactory erzeugbar sein. Das ClientHiveInterface hat 4 neue Methoden mehr als das HiveInterface.
- getName gibt den Namen des Spiels auf dem Server zurück. Diesen Namen bekommt man bei der Erzeugung in der Game Factory.
- introduceLocal / moveLocal werden von der Netzwerk-Komponente aufgerufen, wenn ein anderer Client einen Zug gemacht hat, und der Server euch diesen mitteilt. Abhängig von eurer Implementierung können diese Methoden eventuell dasselbe machen wie die bereits vorhandenen. In jedem Fall bieten euch die unterschiedlichen Aufrufsarten eine Möglichkeit zu testen, woher der Aufruf kommt.
2. Die Replay-Funktionalität der GUI kann genutzt werden.
- Wenn ihr einen Server startet, protokolliert er alle Spiele und legt sie in einem replay-Ordner im Verzeichnis seiner JAR an.
- Die Replays kann die GUI öffnen (siehe Button in der Toolbar). Die GUI erzeugt dann ein Modell über die GameFactory (d.h. eine Instanz eurer Modellklasse) und fährt dann die Züge aus, die im Replay drin stehen. Möchtet ihr die "Zurück"-Tasten nutzen, muss euer Modell auch die Methoden für die Rücknahme implementiert haben.
3. Eine KI schreiben, die die gestellte KI in 80% der Spiele schlägt. Ihr habt hierfür ein paar Vorgaben, die ihr als Hilfestellung nehmen könnt, aber nicht müsst.
- RandomMain ist die Start-Klasse der KI, die ihr bekommen habt. Sie verarbeitet die Kommandozeilenparameter und erzeugt mittels der Methode
ai(InetAddress server, int port, String login, String password, String game, PlayerColor color)
eine KI, die sich mit dem angegebenen Server verbindet, und dem angegebenen Spiel beitritt bzw. es erzeugt. Prinzipiell könnt ihr einfach den Inhalt der ai-Methode ersetzen, um eure AI aufzurufen.
- Damit ihr die Nachrichten des Servers nicht selbst übersetzen müsst, steht euch ein ServerHandler (client.network.ServerHandler) zur Verfügung. Dieser wird mit IP und Port des Servers und einem ServerListener (client.network.ServerListener) erzeugt. Der Handler übersetzt dann die Nachrichten des Servers in Methodenaufrufe, d.h. er ruft bei dem übergebenen ServerListener die passenden Methoden auf.
- Die Methoden des ServerListeners müssen dazu von einer Klasse implementiert werden. Als Vorlage könnt ihr die Klasse HiveAI betrachten. Diese Klasse ist die Implementierung der gestellten KI des Server Interfaces, und ihr *könnt* die Methoden daraus als Vorlage verwenden, müsst aber nicht. Ihr dürft aber Code aus dieser Klasse kopieren oder modifizieren, wenn ihr möchtet. Interessant für euch sind dabei unter anderem die gameCreated, gameOver, joinGame, awaitLogin, startGame Methoden. Da ihr hier komplette Klasse aus unserer KI bekommt, enthält die HiveAI Klasse einige Dinge, die ihr nicht habt, wie z.B. das AIInterface. Das ist für euch an der Stelle aber nicht so interessant.
- Wenn eure KI einen Zug macht (oder ihr im Client an der GUI einen Zug macht), müsst ihr dies dem Server mitteilen. Dafür steht euch die Klasse client.network.ServerCommand zur Verfügung. Wenn ihr in der GameFactory eure Instanz eines ClientHiveInterface erzeugt, bekommt ihr ein ServerCommand von der GUI übergeben, was ihr nutzen könnt, um die Züge der GUI an den Server weiterzuleiten. Für die KI könnt ihr euch ein ServerCommand zu eurem ServerHandler erzeugen, in dem ihr new ServerCommand(<ServerHandler>) benutzt. Das ServerCommand erlaubt euch dann, Spielen beizutreten, starten, etc. und Züge an den Server zu senden.
[b]