JavaScript
10.01.2019, 11:24 Uhr
10.01.2019, 11:24 Uhr
Ein Schachprogramm entwickeln
Ein einigermaßen akzeptabel spielendes Schachprogramm zu entwickeln ist gar nicht so schwer. Dank vorgefertigter JavaScript-Bibliotheken und jQuery reichen knapp 300 Zeilen Code.
Die schweißtreibende Fleißarbeit beim Entwickeln eines Schachprogramms ist das Ermitteln, welche Züge in einer gegebenen Stellung legale Züge sind und die Visualisierung des Schachbretts. Für beide Aufgaben gibt es mit Chess.js und Chessboard.js JavaScript-Bibliotheken, die diesen Part zum Kinderspiel machen. Dank der Bibliotheken kann man sich auf den interessanten Teil der Aufgabe konzentrieren: Nämlich einen Allgorithmus zu finden, welcher versucht die jeweils besten Züge zu finden. Wie das am einfachsten und schnellsten klappt, hat Entwickler Lauri Hartikka in einem englischsprachigen Artikel auf freeCodeCamp erläutert.
Er beschreibt fünf Schritte, die von anfänglichen Zufallszügen über nach dem Wert von Figuren gewichteten Zügen zu einer Vorschau-Planung mit mehreren Halbzügen Tiefe hin zu einer feineren Gewichtung führen, welche die Position einer Figur auf dem Brett in die Kalkulation mit einbezieht.
Die Ergebisse: Schon mit wenigen Zeilen Code ist das Schachprogramm in der Lage zu spielen und gibt einen wunderbaren Gegner ab, weil der menschliche Spieler gegen die Zufallszüge des Programms immer gewinnt. Schritt für Schritt steigt dann die Spielstärke. Kennt das Programm die Werte von Figuren, geht es zur Materialschlacht über. Lernt es das Vorausplanen wird sein Spiel zunehmend ansehnlicher und es macht schließlich keine dummen Fehler mehr. Allerdings stoppt die Anleitung von Lauri Hartikka – nach rund 300 Zeilen Code – just an der Stelle, wenn es darum gehen sollte, dem Programm wirkliche Spielstärke zu verleihen. Der Autor gibt immerhin ein paar Tipps und Links für den weiteren Ausbau.
Sein 300-Zeilen-Schachprogramm finden Sie auf GitHub. Wer den Code einsehen und einfach mal auf Run klicken und eine Partie spielen will, kann das unter https://jsfiddle.net/q76uzxwe/1/ tun.