schachcomputer auf excel mit VBA

6 Antworten

Um nicht von vornherein alle Leidenschaft zu vernichten: ich habe bereits ein spielendes Schachprogramm in zwei Versionen in Excel erstellt: eines was konventionell mit VBA programmiert ist und eines, was alleine mit Standard-Excel-Formeln eine Zugauswahl vornimmt. Beides als Machbarkeits-Studie und beides geht. Spielstärke ist eine andere Frage, da stößt man mit Sicherheit an Grenzen - aber nur zu ! Es soll gerüchteweise sogar mal ein Tabellenblatt gegeben haben, was einen Zug über Iteration ermittelt hat - das habe ich aber selbst nicht geschafft und diese Mappe auch nie bekommen.

Ich hoffe du weißt, wie man Unterprogramme für die

  • Darstellung der Felder
  • Darstellung der Figuren
  • Bewertung einer Stellung
  • Auswahl der Gegner (Computer/Online-Gegner)
  • Auswahl der Farbe
  • Bewegung der Figuren
  • alle Schachregeln (Rochade, Patt, Matt …)

Ich habe da größte Zweifel, dass man das mit VB schafft.

Die Programme von http://www.chessbase.de/index.asp sind definitiv nicht mit VB geschrieben und um Lichtjahre deinen Vorstellungen voraus … :-)

Ich würde Dir vorschlagen, erst mal mit etwas leichterem anzufangen.
Schon alleine Mensch-Ärgere-Dich-Nicht in Excel-VBA zu programmieren dürfte für einen Anfänger eine Herausforderung sein.
Und irgendwann kannst Du dann erst mal versuchen ein Schachprogramm zu schreiben, bei dem der Computer nur überwacht, ob die beiden Spieler die Regeln einhalten.
Eine wirklich selbst spielenden Schachcomputer zu programmieren ist für einen Laien imho nicht möglich. DIE Algorithmen muss schon ein erfahrener Programmierer oder vlt. ein Mathematiker schreiben.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)

Ein "Schachcomputer" mit VBA geht nicht.
Was Du machen kannst: Alle Figuren per Freihandzeichnung als Objekte gestalten und diese einem Makro zuweisen, das sie nach Markierung auf die angeklickte Zielzelle versetzt.

Ein Zugprotokoll erstellen, das dürfte noch das einfachste sein, vielleicht auch Vorgaben nachspielen.
Wie Oubyi schon sagte, kannst Du noch programmieren, dass die Regeln für die Züge eingehalten werden.

Schwierig wird das aber schon beim Schlagen, auch Rochade (incl. R-Rechten) ist sehr schwierig, wenn Du die Regel einbezogen haben willst, dass der König nicht über ein vom Schach bedrohtes Feld rochieren darf.
Ausserdem: nicht über andere Figuren hinweg ausser Springer. König nicht ins Schach, Bauern schlagen en passant: sehr aufwändig, aber vermutlich noch machbar.

Einen (vernünftigen) Zugvorschlag zu erstellen, ist dagegen schon ziemlich unmöglich, selbst für den nächsten Zug: der erfordert die Bewertung einer Stellung!

Also: Figuren bewegen im Feld A1:H8 ja,
evtl auch das abwechselnde Ziehen (muss bei Rochade ausgesetzt werden!),
ggf noch Zugkontrolle, die ist also schon sehr komplex (s.oben),
dann hört es auf.

xl ist auf solche hochkomplizierten Spezial-Logikregeln nicht eingerichtet, ausserdem ist VBA für sowas viel zu langsam. (wenn Du mal das -ziemlich unbekannte- Programm APL bekommen kannst, das wäre vielleicht besser geeignet, ist aber nur eine Vermutung!)
Und Deine Logik-Fähigkeiten dürften auch nicht ausreichen, meine jedenfalls tuns nicht (und ich spiele halbwegs gut Schach)!

Ich habe mit VBA einen Schachmotor erstellt, zur Zeit gibt es keinen der stärker spielt, etwa guter Vereinsspieler. Die Oberfläche läuft unter EXCEL oder WORD.

Hier die Beschreibung mit Links:

ChessBrainVB
============

Schachmotor mit GUI für EXCEL+WORD VBA - sowie eine VB6 win32-exe für Winboard Interface GUI's

Das Schachprogramm kann wie folgt genutzt werden:

1. Starten von ExcelChessBrainX.xlsm mit EXCEL oder WordChessBrainX.docm mit WORD.
Hinweis: EXCEL/Word-Viewer funktionieren nicht, eine vollständige Lizenz ist erforderlich.
Benötigte zusatzliche Dateien: ChessBrainVB.ini für Einstellungen,ChessBrainVB_Book.opn+ChessBrainVB_Book.opi für Eröffnungsbuch
Spielstärke 2100 ELO (nach CCRL 40/4 Bedingungen, siehe http://www.computerchess.org.uk/ccrl/404/rating_list_all.html)
Das Office VBA ist etwa um den Faktor 15 langsamer als die compilierte VB6 winboard EXE.
Es werden ca. 20.000 Züge pro Sekunde berechnet. Z.B. ein Matt in 8 (16 Halbzüge) wird in weniger als 1 Sekunde gefunden (siehe EXCEL GUI: TestPos1).

2. Verwendung eines freien Schachoberflächen-GUI wie ARENA (http://www.playwitharena.com).
Hier kann ChessBrainVB.exe als Winboard-Motor eingebunden werden und z.B. gegen andere Motoren spielen.
Benötigte zusatzliche Dateien: ChessBrainVB.ini für Einstellungen,ChessBrainVB_Book.opn+ChessBrainVB_Book.opi für Eröffnungsbuch
Spielstärke 2600 ELO (nach CCRL 40/4 Bedingungen, siehe http://www.computerchess.org.uk/ccrl/404/rating_list_all.html)
Es werden ca. 300.000 Züge pro Sekunde berechnet.

Download-Links:
Dropbox
https://www.dropbox.com/sh/aec6ktxsfdzbsbm/AAApJSVgfE5cmWOst-HiNUJga?dl=0

GitHub (click )
https://github.com/RZulu54/ChessBrainVB

Excel Oberfläche mit Schachmotor - (programmieren, Microsoft Excel, Schach)