Fork me on GitHub
JSkat logo

JSkat

Eine freie Software, geschrieben in JavaTM

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.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.