Dies ist ein Schach-KOTH mit vereinfachten Regeln (weil Schach selbst schon kompliziert ist, macht es das Spielen mit einem einfachen Programm nicht einfacher). Im Moment ist es auf Java (Version 8) beschränkt, aber das Erstellen einer Wrapper-Klasse ist nicht so schwierig (falls jemand dies tun möchte).
Schachbrett
Das Schachbrett im Steuerungsprogramm verwendet eine modifizierte Version der numerischen ICCF-Notation . Es basiert auf Null, was bedeutet, dass das linke untere Feld die Position ist0,0
, während das rechte obere Feld die Position ist 7,7
.
Geänderte Regeln
- En passant wird ignoriert.
- Rochade ist nicht möglich.
- Die Fünfzig-Züge-Regel gilt automatisch (dh das Spiel endet unentschieden).
- Die Beförderung von Bauern zu Königinnen erfolgt automatisch, wenn sie das Ende des Bretts erreichen.
- Wenn ein Spieler länger als 2 Sekunden braucht, um sich zu bewegen, verliert er das Spiel.
- Wenn Sie einen ungültigen Zug wiederholen, verlieren Sie das Spiel.
- Um zu gewinnen, musst du den feindlichen König erobern . Es reicht nicht aus, den Feind schachmatt zu setzen.
- Auf diese Weise können Sie Ihren König auch auf Felder bewegen, auf denen der Feind Sie einfangen kann.
- Weiß beginnt das Spiel.
- Weiß steht "unten" im Feld (y = 0), Schwarz oben (y = 7).
- Der Zugriff auf andere Ressourcen als Ihren Bot (Internet, Dateien, andere Bots, ...) ist verboten.
Wertung
- Das Gewinnen gewährt Ihnen 3 Punkte, ein Unentschieden 1 Punkt und das Verlieren 0 Punkte.
- Jede Einreichung wird 10 Mal gegeneinander gespielt (5 Mal so weiß, 5 Mal so schwarz).
Regler
Sie finden das Steuerungsprogramm auf github .
Um teilzunehmen, müssen Sie eine Klasse innerhalb desplayer
Pakets erstellen und es muss eine Unterklasse von seinPlayer
. Schauen Sie sich als Beispiel den TestPlayer an (der auch in die Wertung einbezogen wird).
Bei jedem Spiel erstellt der Controller eine neue Instanz Ihres Players. Dann musst du in jeder Runde einen Zug wiederholen. Der Controller stellt Ihnen eine Kopie der Karte zur Verfügung , die ein 8x8-Array von Feldern enthält . Ein Feld enthält Informationen über seine Farbe, seine Position und das Stück auf ihn, wenn es einen gibt.
Der Controller liefert Ihnen auch Informationen über den feindlichen Spieler, wie z. B. isCheck
und getPieces()
. BerufunggetMove()
den Feind werden Sie disqualifiziert.
Anzeigetafel
01) AlphaBetaPV: 229 02) AlphaBeta: 218 03) PieceTaker: 173 04) Käse: 115 05) ThreeMoveMonte: 114 06) StretchPlayer: 93 07) DontThinkAhead: 81 08) SimplePlayer: 27 09) TestPlayer: 13
Der Wettbewerb ist auf Java beschränkt, da dies das Erstellen von Antworten erleichtert, da Sie von den vom Controller bereitgestellten Methoden profitieren können. Wenn jedoch jemand einen Wrapper erstellt, füge ich andere Sprachen hinzu.
quelle
you can profit from the methods provided by the controller
: Das ist nicht alles so wahr. Die meisten nützlichen Methoden sind paketprivat und können daher nicht verwendet werden. Würde es Ihnen etwas ausmachensimulateMove
, derBoard
Klasse eine Methode hinzuzufügen , die eine tiefe Kopie des Boards mit dem angegebenen Zug zurückgibt? Auf diese Weise müssen wir es nicht selbst schreiben (oder Ihren gesamten Code kopieren und einfügen ^^).public
jetzt;)Throwable
oder sogar,Error
weil dadurch ein Verlust vermieden wird. Ich würde es den BoardTipper nennen.Antworten:
AlphaBetaPV
AlphaBetaPV steht für Alpha Beta mit Hauptvariation (es ist keine Hauptvariationssuche). Mit nur ein paar Zeilen mehr, die in den Code von AlphaBeta.java eingewoben sind, schlägt es AlphaBeta.java. Und nochmal, entschuldige, dass du nur Codes aus anderen Internetquellen in diesen JAVA-Code verwandelt und verschmolzen hast.
Ich spiele immer noch langweilig.
quelle
PieceTaker
Der Code ist ein bisschen chaotisch, aber es funktioniert. Im Moment gewinnt es gegen alle anderen Spieler, auch wenn es nur 400ms statt der erlaubten 2000ms hat.
Ich verwende Alpha-Beta-Bereinigung mit iterativer Vertiefung, um sicherzustellen, dass die KI das Zeitlimit nicht überschreitet. Die aktuelle Heuristik ist sehr einfach (nur verlorene / genommene Teile werden berücksichtigt; keine Position auf dem Brett usw.).
In Zukunft könnte ich auch Killerheuristiken hinzufügen und die Bewegungen sortieren, bevor ich sie untersuche.
quelle
StretchPlayer
Dieser Bot spielt genauso wie ich!
Ich bin übrigens schrecklich im Schach.
Die Kommentare erklären, was es tatsächlich tut. Es ist sehr ähnlich zu meinem Denkprozess.
Als zusätzlicher Bonus schlägt er alle anderen Bots um ein Vielfaches. (bisher)
BEARBEITEN: Prognostiziert jetzt den Gegner, indem er sich selbst als Feind rennt!
EDIT 2: Das Programm machte den Fehler, den König nicht zu töten, als er weit offen war. Es wurde dementsprechend gerügt.
quelle
Monte mit drei Zügen
Dieser Typ schaut sich die nächsten drei Züge an (meine, deine, meine) und wählt den Zug mit der höchsten Punktzahl. Wenn mehr als 60 Züge zur Verfügung stehen, werden bei jedem Schritt nur zufällige 60 ausgewählt. Wenn ein einzelner Zug (von allen, nicht die gewählten 60) das Spiel beendet, nehme ich das natürlich sofort vor.
Um ein Brett zu punkten, gebe ich jedem Stück einen Grundwert. Es wird dann durch die Beweglichkeit des Stücks, wie viele (und welche) Stücke es bedroht und wie viele Stücke es bedrohen, verändert.
Natürlich sind mobile Könige im frühen Spiel nicht unbedingt gut, deshalb mache ich die Werte für sie ein bisschen.
Dies läuft ziemlich schnell und kann ein Spiel mit der aktuellen Ernte in 3-4 Sekunden beenden. Es sieht so aus, als gäbe es Platz, um es bei Bedarf um ein paar Züge zu erhöhen.
aktualisieren:
quelle
color.opposite()
anstelle von verwendengetOpponent()
;)Alpha Beta
Entschuldigung, dass Sie nur Code aus anderen Internetquellen in diesen JAVA-Code verwandelt und verwandelt haben. Aber es schlägt alle anderen Gegner (einschließlich PieceMaker) ... bis jetzt.
Und sorry, dass du so maschinenlangweilig bist.
quelle
Keine Antwort, sondern eine Simulation, die hilft
Ich habe eine neue Klasse hinzugefügt: GamePanel und Game and Controller bearbeitet
Es ist noch nicht sehr hübsch.Wussten Sie, dass Unicode Schachfiguren hat?!? (total geil!)Übrigens, du brauchst UTF-8, damit diese Charaktere angezeigt werden. Es hat bei mir funktioniert, aber ich bin mir nicht sicher, wie es bei anderen Betriebssystemen funktionieren wird.
Fehler beim Beenden des Spiels behoben (danke an tim für den Hinweis).
GamePanel:
Spiel:
Regler:
quelle
SimulationListener
, und wenn es keine Spiele mehr gibt, wird eine Ausnahme geworfen. Und ich hätte unten weiß gesetzt, aber ich schätze, dein Weg funktioniert auch :)DontThinkAhead
Diese KI denkt nicht gern voraus. Wenn es sieht, dass es ein feindliches Stück fangen kann, wird es dies sofort tun. Wenn dies nicht möglich ist, wird ein Teil nach dem Zufallsprinzip verschoben.
Es ist etwas besser als
SimplePlayer
undTestPlayer
und ich habe es hauptsächlich geschrieben, um ein Gefühl für den Controller-Code zu bekommen und etwas zu testen.quelle
Käse
Ja, du hast es richtig gelesen. Ein Block Käse, der Schach spielt.
Algorithmus
Der Käse überprüft alle möglichen Züge und bewertet sie entsprechend. Er (der Käse, und ja, es ist ein Mann) verwendet die folgende Anleitung, um seine Entscheidungen zu bewerten:
Essen
Gefahr des Verzehrs
Chance, in der nächsten Runde zu essen
Ausstehende Verbesserungen
Fehler behoben
quelle
SimplePlayer
Dieser Spieler stellt nur sicher, dass er gültige Züge verwendet, aber ansonsten ist er ziemlich dumm.
quelle