Der Autor entwickelte Programme in C++, Java und für Android, die in der Lage sind, Schach zu spielen.
C++: Das Programm beherrscht die Regeln des Schach-
spiels, inklusive der Sonderzüge Rochade, En passant
und Bauernumwandlung auf der letzten Reihe.
Das Programm besitzt ein GUI mit Menusteuerung.
Die Bewegung der Spielfiguren auf dem Schachbrett
erfolgt über Mausklick, jeweils auf die Ausgangs- und
die Zielposition. Dabei können nur eigene Figuren
bewegt werden und es können nur zulässige, legale
Züge ausgeführt werden.
Die Anzeige der bisherigen Spielzüge, der erfassten
Namender Spieler und der je Spieler verbrauchten Zeit
erfolgt neben dem Schachbrett.
Die Erfassung der Partiedaten (Spielernamen, Ort, Zeit usw.) erfolgt über ein Dialogfenster, das über das Menu des Hauptfensters geöffnet wird.
Die gespielten Partien inkl. der erfassten Partiedaten können in einer MySQL-Datenbank gespeichert werden. Hierzu wird im Hauptfenster der entsprechende Menupunkt gewählt.
Diese dann in der Datenbank gespeicherten Partien können in einer Tabelle angezeigt werden. Die Tabelle bietet eine Auswahlmöglichkeit zur Übernahme der entsprechenden Partie ins Programm.
Diese aus der Datenbank ins Programm importierten Schachpartien können dann Zug für Zug nachgespielt werden. Dafür ist ein Button “Nächster Zug“ neben
dem Schachbrett vorgesehen. Die entsprechenden ausgeführten Spielzüge werden dabei in der Textbox
markiert. Auch ein Weiterspielen unterbrochener
Partien ist möglich.
Wie funktioniert das Programm grundsätzlich?
Die Bewertung der möglichen Spielzüge durch das Programm, und die Auswahl eines Spielzuges davon, geschieht grundsätzlich nach folgenden Kriterien:
Steht man im Schach oder gerät man durch einen möglichen Zug ins Schach?
Kann man eine gegnerische Figur schlagen oder im nächsten Zug bedrohen?
Wie hoch ist die Mobilität, d.h., wie viele Felder können nach einem Spielzug durch diese Spielfigur erreicht werden?
Wird nach dem eigenen Zug eine eigene Figur durch den Gegner bedroht?
Das Schachprogramm geht dabei wie folgt vor:
Es werden alle legalen Züge ermittelt und in eine Liste der möglichen Züge eingetragen.
Für diese Züge werden alle möglichen gegnerischen Züge berechnet und dabei wird überprüft,
a) ob man dabei ins Schach gerät,
b) ob dieses Feld sicher ist (vom Gegner nicht bedroht), oder
c) ob eine eigene höherwertige Figur in Folge dieses Spielzuges bedroht wird.
Gerät man dabei ins Schach, wird der entsprechende Zug aus der Liste gestrichen, ebenso, wenn das Zielfeld bedroht wird. Wird eine andere eigene Figur durch diesen Spielzug einer Bedrohung ausgesetzt, so verringert sich die Bewertung dieses Spielzuges.
Es wird ermittelt, ob man eine gegnerische Figur schlagen kann, was die Bewertung dieses Spielzuges erhöht.
Außerdem erfolgt eine Tiefensuche für den darauffolgenden Zug, in dem geprüft wird, ob man Schach geben kann. Dies erhöht die Bewertung dieses Spielzuges.
Diese Tiefensuche ermöglicht auch die Feststellung, ob man im Folgezug (unabhängig vom konkreten Zug des Gegners) möglicherweise eine gegnerische Figur bedrohen könnte. Auch dies erhöht die Bewertung dieses Spielzuges.
Diese Tiefensuche ist auch wesentlich für die Berechnung der Mobilität, also wie viele Felder die eigene Figur eines Spielzuges im nächsten Zug erreichen könnte. Auch die Mobilität beeinflusst die Bewertung eines Spielzuges positiv.
Der Spielzug mit der insgesamt höchsten Bewertung wird ausgewählt. Bei mehreren Spielzügen mit gleicher Bewertung (kommt praktisch nur in der Eröffnung vor), erfolgt aus dieser Liste eine Zufallsauswahl.
Ein Minimax-Algorithmus zur Tiefensuche ist bislang noch nicht implementiert, ist aber in Arbeit.
Die Klassen des Programmes
Download des Programmes folgt ...
Java/Android-Version
Die Java-Desktop-Version und die darauf aufbauende Android-Version sind grundsätzlich gleich aufgebaut, außer sprachspezifischen Besonderheiten.
Details folgen, ebenso der Download.