Eine eigene Skat-KI für JSkat implementieren
Wenn Sie Interesse haben, selbst einmal eine Skat-KI zu implementieren, so ist der Start mit JSkat sehr einfach. Die folgende sechs Schritte sind beispielhaft für die IDE Eclipse mit den Plugins EGit (Git) und Buildship (Gradle) dargestellt.
Schritt 1: Git-Repository einrichten
Über das Menü "Window - Show View - Git Repositories" können Sie die Sicht auf Repositorys mit dem Versionsverwaltungssystem Git aktivieren. Klonen Sie das JSkat-Repository indem Sie als URL
https://github.com/b0n541/jskat-multimodule.git
eingeben.
Schritt 2: JSkat als Projekt einrichten
Klappen Sie das geklonte Repository auf. Jetzt können Sie mit der rechten Maustaste auf "Working Tree" klicken und "Import projects..." auswählen. Im nächsten Dialog wählen Sie als Wizard "Import as general project" aus.
Schritt 3: Gradle aktivieren
Klicken Sie mit der rechten Maustaste auf das neue Projekt und wählen Sie "Configure - Add Gradle Nature" aus. Eclipse sollte jetzt alle benötigten Bibliotheken herunterladen und das Projekt für die Entwicklung einrichten. Nach dem erfolgreichen Einrichten sollten drei neue Sub-Projekte in Eclipse sichtbar sein.
Schritt 4: Projektstruktur
JSkat ist in drei Sub-Projekte aufgeteilt. Durch die Trennung von GUI-Code und Logik konnten weite Teile von JSkat für JSkat on Android wieder verwendet werden.
- jskat-base
Basis-Klassen ohne GUI-Code, werden sowohl von JSkat als auch von Jskat on Android genutzt. Hier liegen auch die Klassen für die KI-Spieler. - jskat-swing-gui
GUI-Klassen für die Swing-basierten GUI-Teile, diese werden nach und nach auf JavaFx umgestellt - jskat-javafx-gui
GUI-Klassen für die JavaFX-basierten GUI-Teile und die Main-Klasse zum Starten von JSkat
In jedem Sub-Projekt gibt es vier Verzeichnisse für Quellcode:
- src/main/java: Alle Java-Klassen
- src/main/resources: Alle Ressourcen wie Bilder oder Konfigdateien
- src/test/java: Alle Unit-Tests
- src/test/resources: Alle Ressourcen für die Tests
Im ersten Verzeichnis im Sub-Projekt jskat-base liegen die Java-Klassen für die KIs.
Schritt 5: Eigenen Spieler implementieren
Sie können das Package für den Zufallsspieler (unter org.jskat.ai.rnd) einfach kopieren und unter einem neuen Namen neben neben den anderen KIs ablegen. Wichtig ist, dass der Spieler von der Klasse AbstractJSkatPlayer abgeleitet wird, damit er das Wissen über den Spielverlauf erhält. Die Verarbeitung des Spielverlaufs (wer hat wann, was gespielt) bekommen Sie über den AbstractJSkatPlayer geschenkt. Jetzt können Sie die einzelnen Spielzüge in einem Skatspiel programmieren.
Die Methoden
- prepareForNewGame()
- startGame()
- bidMore()
- holdBid()
- pickUpSkat()
- discardSkat()
- announceGame()
- playCard()
- finalizeGame()
werden von der Klasse SkatGame nacheinander aufgerufen. Hier können Sie die Spielzüge für Ihre KI umsetzen.
Um den Spieler über die Oberfläche von JSkat starten zu können, sind noch drei weitere Schritte notwendig:
In der Enum org.jskat.ai.PlayerType muss ein Eintrag für die neue KI vorhanden sein, z. B.:
/**
* My skat AI player
*/
MY_SKAT_AI_PLAYER("org.jskat.ai.new.MySkatAiPlayer")
In der Klasse org.jskat.gui.table.SkatSeriesStartDialog ab Zeile 107 werden alle verfügbaren KIs für die Oberfläche zusammengesammelt. Hier muss der neue Spieler hinzugefügt werden:
playerTypes.add(PlayerType.MY_SKAT_AI_PLAYER);
In der gleichen Klasse muss schließlich ab Zeile 231 der Spieler noch eine Beschriftung bekommen:
case MY_SKAT_AI_PLAYER:
result = "My skat AI player";
break;
Jetzt können Sie Ihre KI über die Oberfläche starten.
Schritt 6: JSkat aus Eclipse heraus starten
Klicken Sie mit der rechten Maustaste auf die Klasse org.jskat.JSkat und wählen Sie "Run as - Java Application" aus. Die Fehlermeldung auf der Konsole, dass kein Splashscreen gefunden wurde, kann mit dem VM-Parameter
-splash:src/main/resources/org/jskat/gui/img/gui/splash.png
behoben werden.
Bonus: Mit offenen Karten spielen
Damit Sie besser sehen können, bei welchen Karten Ihr Spieler welche Spielzüge macht, können Sie JSkat auch mit offenen Karten spielen. Suchen Sie in Ihrem Home-Verzeichnis (z.B. Dokumente und Einstellungen) ein Verzeichnis mit dem Namen .jskat. Dort liegt die Datei jskat.properties. Mit einem Text-Editor können sie die Option
cheatDebugMode=true
aktivieren. Beim nächsten Start von JSkat wird nun immer mit offenen Karten gespielt.
Wir wünschen Ihnen viel Spaß beim Experimentieren und würden uns freuen, wenn Sie uns eine Rückmeldung über Ihre Erfolge bei der Implementierung einer eigenen Skat-KI geben würden. Noch mehr würden wir uns freuen, wenn wir Sie als KI-Entwickler für JSkat gewinnen könnten.