Schach ist ein uraltes Strategiespiel mit nahezu unendlicher Komplexität und Tiefe; es gibt mehr verschiedene Stellungsvariationen, als Atome im beobachtbaren Universum. Als Schachspieler und regelmässiger Nutzer von Online-Schachplattformen wie lichess.org hat mich das Thema Schachprogrammierung schon seit längerem interessiert. Da lag es Nahe die Diplomarbeit zu nutzen um tief in das Thema einzutauchen. Als Resultat habe ich eine Schachwebseite entworfen und umgesetzt, die mir nicht nur Einblick in die Schachprogrammierung, sondern auch in Themen wie Gameprogrammierung, Networking, Security, uvm. verschafft hat.
Basis für die Plattform ist der Zuggenerator, der innerhalb von weniger als einer halben Millisekunde alle erlaubten Züge jeder beliebigen Stellung errechnen kann. Bei der Umsetzung bin ich ich dabei in tiefe Abstraktionsebenen der Informatik eingetaucht. Um Züge so effizient zu generieren, wurden unzählige interessante Techniken verwendet, wie beispielsweise bitweise Operationen mit sogenannten Bitboards oder magische Zahlen und Angriffstabellen. Diese Techniken sind die Grundlage für die meisten modernen Schachcomputer und haben alle nur ein Ziel: extreme Effizienz.
Aufbauend auf den Zuggenerator, der als Bibliothek in einem Monorepository Ökosystem entwickelt wurde, habe ich einen Gameserver programmiert, der mit dem Websockets Protokoll Online-Schachspiele in Echtzeit zwischen zwei Spielern erlaubt und eine hohe Anzahl gleichzeitiger Spiele handhaben kann.
Das Benutzerinterface, aufbauend auf React mit Next.js, verbindet sich zum Gameserver und macht das eigentliche Spielen möglich, mit einer breiten Palette von Funktionen, wie beispielsweise das Analysieren von Positionen mit dem stärksten Schachcomputer auf dem Markt "Stockfish" und allem was man dazu braucht.
Weiterhin können Benutzer der Plattform gegen den Schachcomputer spielen (was allerdings recht hoffnungslos ist), die eigenen vergangenen Spiele nochmal durchgehen und ihr Schachspiel auf ein neues Level bringen.
Das Resultat des Projekts ist eine funktionierende Multiplayer-Schach-Webseite, als MVP positioniert und bietet eine gute Grundlage für zukünftige Weiterentwicklung.
Hier geht es zum vollständigen Quellcode.