Autor Beitrag
Mathematiker
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mo 22.10.12 11:30 
Hallo,
bevor ich in 3 Stunden zu einem Kurzurlaub verschwinde :wave: , gibt's von mir noch ein weiteres Programm, da kaum jemand mein Digger und schon gar nicht meinen Addiator mag. :bawling:

Jetzt ist es ein Schachprogramm.
An diesem arbeite ich schon seit mehreren Jahren und bin daher etwas egoistisch: Dieses Mal nur als Freeware und ohne den Quelltext.
Während ich mich von dem anstrengenden Programmieren erhole, dürft Ihr gern mein Programm mit konstruktiven, kritischen Anmerkungen versehen. :lol:

Gezogen werden die Figuren mit der Maus, wie sonst.
Man kann gegen den Computer spielen, was ganz gut geht. Die Wahl der Spielstufe gibt an, wie viele Halbzüge der Computer voraus denkt. Da mit jeder höheren Spielstufe der Berechnungsaufwand für den Computer exponentiell steigt, wird die "Denkzeit" des PCs auch schnell größer.
Auf einem hinreichend schnellen Computer dürfte Stufe = schwer noch machbar sein. Darüber hinaus braucht man schon viel Geduld, bis das Programm den nächsten Zug macht.
Um ein Spiel nachzuverfolgen, kann man in der Zugliste einen Halbzug auswählen, so dass die Figuren auf diese Spielsituation positioniert werden. Durch Auswahl des nächsten Listeneintrags oder über die Schalter kann dann die Partie weiter verfolgt werden.

Wichtig ist noch, dass in meinem Schachprogramm keine Eröffnungsbibliothek enthalten ist. Alle Züge werden je nach Situation vom Computer berechnet. Durch einen meiner Schüler (Elo-Zahl 1840, ist das viel?) wurde mir gesagt, dass mein Programm am Anfang daher schwächelt.

Verrückt ist, dass ich trotzdem gegen mein eigenes Programm (Stufe: normal) nur noch verliere. Aber unter Euch wird es ja bessere Schachspieler als mich geben. :think:

Beste Grüße
Mathematiker

Rev 1: Die Zugliste wird jetzt in besserer Notation, d.h. mit Figur und evtl. Schlagen angegeben.
Rev 2: Auch die Rochade und Schachgebote werden notiert. Die Zugliste kann als Txt gespeichert werden.
Rev 3: Der Spielstand einer Partie kann gespeichert und später wieder geladen werden.
Rev 4: Mit Möglichkeit eines Zugvorschlages, außerdem verbesserte Speichermöglichkeit.
Rev 5: In der Zugliste wird immer zum letzten Zug gescrollt.
Rev 6: Anfangs- und Zielfeld des Zugvorschlages werden mit einem Rahmen markiert.
Rev 7/8: Auf Wunsch Tonausgabe bei einem Computerzug.
Rev 9: Der letzte Zug der Partie kann hervorgehoben werden. (Voreinstellung)
Rev 10: Grundeinstellungen werden gespeichert und wieder geladen.
Rev 11: Verschiedene Änderungen an der Oberfläche, besserer Zugvorschlag und 2 neue Varianten.
Rev 12: Über das Menü können im Moment 15 verschiedene Standarderöffnungen geladen werden.
Rev 13: mit 26 Eröffnungsvarianten.
Rev 0: schach2.zip enthält zusätzlich Programmteil zum Problemschach, siehe entsprechenden Beitrag
Rev 1: in schach2.zip Verzeichnisfehler beseitigt.
Rev 2: schach2.zip: application.processmessages stark reduziert, beim Programmstart wird die Zugsuche nicht sofort gestartet.
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von Mathematiker am Do 06.02.14 11:58, insgesamt 19-mal bearbeitet

Für diesen Beitrag haben gedankt: Anika, kaufmax, kolibri95, Symbroson
Dr. Hallo
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 110
Erhaltene Danke: 13

XP
C/C++/C#
BeitragVerfasst: Mo 22.10.12 13:50 
Hi, ich bin kein großer Schachspieler. Soweit ich das aber nach bischen testen beurteile, funktionierts sehr gut.

Was mich (im Computermodus) wundert: Die CPU-Auslastung ist auf meinem Rechner ständig um 30%-45%, obwohl ich an der Reihe bin (da könnte der Computer sich doch eigendlich mal ausruhen). Laufen da Berechnungen? Aber was soll berechnet werden, wenn ich doch noch garnicht gezogen hab?

Gruß!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 22.10.12 14:00 
Auch wenn ich nicht weiß wie es hier ist: In meinem Schachprogramm mache ich in der Zeit Vorausberechnungen, das macht durchaus Sinn.

Was ein wenig schade ist, ist, dass nur ein Kern benutzt wird, so dass der größte Teil der Rechnerleistung brach liegt. ;-)
gerd8888
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 205
Erhaltene Danke: 3

Win7
Delphi 10.1 Starter (kostenlos) Lazarus
BeitragVerfasst: Mo 22.10.12 15:44 
Habe gerade eine Partie gespielt. Dass keine Eroeffnungsbibliothek eingebaut ist, habe ich schnell nach Se7 statt Sg6 in der Aljechin Verteidigung gemerkt.
Das Brett ist schön gross und positiv aufgefallen ist mir ausserdem, dass wenn man eine Figur ziehen will z.B. auf ein falsches Feld, man ein Verbotsschild in dem Mauszeiger bekommt. Der Gesamteindruck ist, wenn man das mit Fritz und Rybka vergleicht, eher bescheiden. Da ist man Variantenangabe (die Züge, die er gerade berechnet usw.) und Datenbanken gewohnt. Aber der Vergleich ist bei so einem absichtlich einfachen Programm auch schlecht. Gerade für Schachanfänger ist es glaube ich das richtige Schachprogramm.
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mo 22.10.12 15:47 
Hallo,
ich bin schon fast im Auto und weg ...
Deshalb noch ganz kurz:
user profile iconDr. Hallo hat folgendes geschrieben Zum zitierten Posting springen:
Die CPU-Auslastung ist auf meinem Rechner ständig um 30%-45%, obwohl ich an der Reihe bin (da könnte der Computer sich doch eigendlich mal ausruhen).

Die Berechnung des Computerzuges läuft in einem eigenen Thread. Ständig wird die Situation analysiert. Das ist auch fair, da der Spieler ja auch weiter denkt, während sein Gegner nach einem Zug sucht.
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Was ein wenig schade ist, ist, dass nur ein Kern benutzt wird, so dass der größte Teil der Rechnerleistung brach liegt. ;-)

Mit meinem Delphi 5 wüsste ich gar nicht, wie man zwei oder mehr Kerne ansprechen kann.

Beste Grüße und jetzt im Urlaub
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 22.10.12 16:16 
Moin!

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Mit meinem Delphi 5 wüsste ich gar nicht, wie man zwei oder mehr Kerne ansprechen kann.
Wenn ich mal kurz dazwischen grätschen darf: mehrere Threads? :zwinker: :idea: Wenn du es nicht explizit verbietest (in den PE-Flags des EXE-Images), dann werden Threads immer möglichst automatisch auf verschiedene Kerne verteilt.

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.


Zuletzt bearbeitet von Narses am Do 21.08.14 13:03, insgesamt 1-mal bearbeitet
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Mo 22.10.12 18:43 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
mehrere Threads? :zwinker: :idea: Wenn du es nicht explizit verbietest (in den PE-Flags des EXE-Images), dann werden Threads immer möglichst automatisch auf verschiedene Kerne verteilt.


Ja, und zwar von Windows selbst. Damit hat Delphi, mit dem man die Threads programmiert, überhaupt nichts zu tun. Der Zugriff auf einzelne Prozessoren bzw. Prozessorkerne ist ja ein Hardwarezugriff. Derlei Zugriffe werden unter Windows NTx jedoch aus gutem Grunde weitgehend unterbunden.

Einfach mal zwei Threads dauerbeschäftigen, und schon geht bei beiden Prozessor(kern)en die Auslastung (im sog. Taskmanager) auf maximal.
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mo 22.10.12 19:24 
Hallo,
ich bin im Urlaub und kann nicht aufhören, ins Forum zu sehen?! Ich brauche Urlaub! :nut:
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mal kurz dazwischen grätschen darf: mehrere Threads? :zwinker:

Keine Ahnung, warum es nicht auf zwei Kerne verteilt wird. Zum "Beweis", dass es zwei Threads sind, füge ich den Kommentar des Prozess-Explorers an.

So, morgen gehe ich wandern durch die schöne Sächsische Schweiz. Und dann ignoriere ich die EE! Versprochen! :zustimm:

Beste Grüße aus Königstein mit einem wunderschönen Blick auf die Elbe
Mathematiker

Nachtrag: Abbildung des Prozess-Explorers gelöscht, da sie nichts aussagt, wie ich jetzt weiß. :wink:

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein


Zuletzt bearbeitet von Mathematiker am Mi 24.10.12 19:07, insgesamt 1-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10181
Erhaltene Danke: 1254

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 22.10.12 20:45 
Moin!

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich mal kurz dazwischen grätschen darf: mehrere Threads? :zwinker:

Keine Ahnung, warum es nicht auf zwei Kerne verteilt wird. Zum "Beweis", dass es zwei Threads sind, füge ich den Kommentar des Prozess-Explorers an.
Was soll der Screeenshot beweisen? :gruebel: Du hast den Main- und einen Worker-Thread. :nixweiss: Der Witz an user profile iconjaenickes (An-)Frage/Hinweis dürfte aber doch wohl sein, mehrere Worker-Threads zu haben (was voraussetzt, dass der Algorithmus parallelisierbar ist, OK)! ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Mo 22.10.12 21:42 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
(was voraussetzt, dass der Algorithmus parallelisierbar ist, OK)! ;)


Ist er. Um mal im Modus zu bleiben, daß man auf den Gegenzug wartet: Wenn z.B. x Gegenzüge möglich sind (sehr wahrscheinlich deutlich mehr, als Prozessoren bzw. Prozessorkerne vorhanden), so sind dazu schon x Threads (jeder berechnet einen Baum an Zugmöglichkeiten) eröffnenbar, die alle nach der Minimaxstrategie bewertbar sind. Zudem erlaubt jeder der x Gegenzüge soundsoviele eigene Züge, für je ein weiterer Thread eröffnet werden könnte (sicher nicht sinnvoll).
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 23.10.12 00:01 
Hallo Gerd8888,
user profile icongerd8888 hat folgendes geschrieben Zum zitierten Posting springen:
Der Gesamteindruck ist, wenn man das mit Fritz und Rybka vergleicht, eher bescheiden.

Ich hätte nie vermutet, dass mein kleines Programm mit diesen Schachgrößen verglichen wird. Allein der Vergleich ist ja schon fast ein Ritterschlag. Danke. An diese Superprogramme werde ich nie herankommen.
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Du hast den Main- und einen Worker-Thread. :nixweiss: Der Witz an user profile iconjaenickes (An-)Frage/Hinweis dürfte aber doch wohl sein, mehrere Worker-Threads zu haben (was voraussetzt, dass der Algorithmus parallelisierbar ist, OK)! ;)

Ebenfalls Danke. Wieder etwas gelernt. Als Freizeitprogrammierer habe ich von so etwas keine Ahnung. Ich war schon froh einen zusätzlichen Thread hinbekommen zu haben. Für mich waren das zwei "parallele" Threads. Da das falsch ist, war der Stolz auf mein Ergebnis wohl verfrüht.
user profile iconDelphi-Laie hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
(was voraussetzt, dass der Algorithmus parallelisierbar ist, OK)! ;)

Ist er.

Stimme ich Dir zu. Das wird aber meine Fähigkeiten überschreiten. Es war schon schwierig, die wahrscheinlich schlechten Halbzüge schnell auszusortieren und die besseren vernünftig zu bewerten. Wie das mit zwei parallelen Prozessen, die sich nicht behindern dürfen, gehen soll, ist mir schleierhaft. Ich habe noch viel zu lernen. :o

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 23.10.12 06:11 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Für mich waren das zwei "parallele" Threads. Da das falsch ist, war der Stolz auf mein Ergebnis wohl verfrüht.
Das war ja auch schon wichtig, denn sonst würden die Berechnungen die GUI blockieren. Und dass das so gut läuft, ist auch schon viel wert und nicht selbstverständlich. Auch nicht bei professionell entwickelten Programmen.

user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
Stimme ich Dir zu. Das wird aber meine Fähigkeiten überschreiten. Es war schon schwierig, die wahrscheinlich schlechten Halbzüge schnell auszusortieren und die besseren vernünftig zu bewerten. Wie das mit zwei parallelen Prozessen, die sich nicht behindern dürfen, gehen soll, ist mir schleierhaft.
Die Grundidee wäre, dass du nach den ersten Zugberechnungen die Verschachtelungen an weitere Threads auslagerst.

Dass das nicht einfach ist, ist sicher richtig. ;-) Tipps könnte ich/wir dir geben, wenn du uns (oder mir per PN) Teile des Quelltextes zeigst. Speziell den Teil, der die Rekursionen macht, und wie du dazu die Daten ablegst. Natürlich nur, wenn du das möchtest.

Für diesen Beitrag haben gedankt: Mathematiker
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Di 23.10.12 08:54 
Hallo Jaenicke,
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Dass das nicht einfach ist, ist sicher richtig. ;-) Tipps könnte ich/wir dir geben, wenn du uns (oder mir per PN) Teile des Quelltextes zeigst.

Danke für das Angebot. Gegebenenfalls werde ich dies gern annehmen.
Allerdings müsste ich meinen Quelltext erst einmal auf ein lesbares Format bringen. In seiner jetzigen Form kann man ihn keinem zumuten.
Ich gestehe, dass ich zu den "Chaoten" gehöre, die nie Kommentare schreiben, Objekten und Variablen selten Bezeichnungen geben, die ihren Inhalt erkennen lassen, und die Formatierung der Quelltexte ... :motz:
Wenn ich in der EE Quelltexte veröffentliche, überarbeite ich sie jedes Mal. Andernfalls würden alle (berechtigterweise) meckern.

Ich weiß: Damit bin ich ein abschreckendes Beispiel. Ich versuche mich ja zu bessern. :D

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 23.10.12 13:53 
Was die Formatierung angeht drücke ich ohnehin als erstes nach dem Öffnen fremder Quelltexte in der Regel Strg + D um den delphiinternen Codeformatter drüberlaufen zu lassen. (Ich selbst formatiere ohnehin in der Regel genauso wie der. ;-))
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mi 24.10.12 13:18 
Hallo,
ich habe erste Änderungen am Programm (Rev 1/2) vorgenommen.
Die Zugliste enthält jetzt auch die ziehende Figur. Außerdem wird angegeben, ob eine gegnerische Figur geschlagen wird. Eine Rochade und Schachdrohung wird auch notiert.
Ich bin verwundert, dass mir das erste heute aufgefallen ist. :roll:

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Mi 26.12.12 13:38 
Hallo!

@user profile iconMathematiker: Kannst du vielleicht eine Zug-Tipp-Funktion einbauen? Vielleicht auch eine Möglichkeit, das laufende Spiel zu speichern, um es zu einem späteren Zeitpunkt wieder zu laden und weiter zu spielen!

Ich bin erst vor Kurzem auf das Schachprogramm gestossen und muss sagen: Hut ab! Habe gleich verloren!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Mi 26.12.12 23:22 
Hallo galagher,
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Kannst du vielleicht eine Zug-Tipp-Funktion einbauen? Vielleicht auch eine Möglichkeit, das laufende Spiel zu speichern, um es zu einem späteren Zeitpunkt wieder zu laden und weiter zu spielen!

Werde ich sehen. Das wird aber nicht so schnell, da ich mich erst wieder in den etwas komplexeren Quelltext hineindenken muss. Gib mir mal 1-2 Wochen Zeit. :o

Beste Grüße
Mathematiker

Nachtrag: Manches geht doch schneller.
In der Revision 3 kannst Du eine Partie speichern und zu einem späteren Zeitpunkt wieder laden. Allerdings werden nur vollständige Züge gespeichert, d.h. Weiß und Schwarz müssen beide gezogen haben.
Das Problem mit dem Zugvorschlag dauert aber doch einige Zeit.

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein
galagher
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2510
Erhaltene Danke: 44

Windows 10 Home
Delphi 10.1 Starter, Lazarus 2.0.6
BeitragVerfasst: Do 27.12.12 19:37 
user profile iconMathematiker hat folgendes geschrieben Zum zitierten Posting springen:
In der Revision 3 kannst Du eine Partie speichern und zu einem späteren Zeitpunkt wieder laden. Allerdings werden nur vollständige Züge gespeichert, d.h. Weiß und Schwarz müssen beide gezogen haben.
Das Problem mit dem Zugvorschlag dauert aber doch einige Zeit.
Danke! Da warte ich doch gerne drauf!

_________________
gedunstig war's - und fahle wornen zerschellten karsig im gestrock. oh graus, es gloomt der jabberwock - und die graisligen gulpen nurmen!
Delphi-Laie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1600
Erhaltene Danke: 232


Delphi 2 - RAD-Studio 10.1 Berlin
BeitragVerfasst: Fr 28.12.12 15:05 
user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
@user profile iconMathematiker: Kannst du vielleicht eine Zug-Tipp-Funktion einbauen?


Jeder gute oder zumindest sorgfältige Schachspieler schläft nicht, wenn er nicht am Zuge ist, sondern denkt mit. Tut sein Gegenüber (Gegner) den erwarteten Zug, ist er im Vorteil, sowohl zeitlich als auch in bezug auf den weiteren Spielverlauf. Jedes fortgeschrittene Schachprogramm verfährt genauso, insofern sind Zugvorschläge nur ein "Abfallprodukt" des Vorausdenkens.

Ob Mathematikers Programm dieses Mitdenken schon implementiert hat, weiß ich nicht, ich stelle mir aber nicht allzu schwierig vor, das "einzupflegen", weil grundsätzlich die gleiche Minimaxstrategie, als wenn man am Zuge wäre, angewandt werden muß (müßte). Nur finalisiert das eben nicht ein einen Zug.
Mathematiker Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2622
Erhaltene Danke: 1447

Win 7, 8.1, 10
Delphi 5, 7, 10.1
BeitragVerfasst: Fr 28.12.12 23:10 
Hallo,
so, jetzt glaube ich auch den 2.galagher-Wunsch gelöst zu haben.
Das Programm gibt nun (bis auf den allerersten Zug) auf Wunsch auch einen Zugvorschlag. Dazu analysiert ein zweiter Thread die aktuelle Spielsituation. Dieser wird aber nur aktiv, wenn erstmals ein Zugvorschlag abgerufen wird.

Ich hoffe, dass es jetzt wirklich als zweiter "richtiger" Thread durchgeht. Wenn ja, habe ich das erste Mal so etwas geschafft und gebe zu, dass ich etwas stolz bin. :D Einfach die bisherige Zuganalyse zu nutzen, war nicht möglich, da diese ja gerade für den nächsten Computerzug rechnet.
Rätselhaft ist mir noch, ob nun tatsächlich zwei CPU-Kerne beschäftigt sind. Wie kann ich so etwas prüfen? Im Task-Manager sehe ich nur, dass die CPU-Auslastung steigt.

Der Zugvorschlag ist im Normalfall relativ gut, natürlich nicht immer optimal; aber mein Programm ist ja auch kein Profischachprogramm.
Bei den ersten Zügen der Partie sollte man sich aber nicht auf den Vorschlag verlassen (keine Eröffnungsbibliothek, wird auch nicht, da zuviel Aufwand). Mit fortschreitender Spielentwicklung wird der Zugvorschlag kontinuierlich besser. Ist man allerdings schon am Verlieren, kann der Tipp auch nicht mehr viel nutzen.
Schön ist, dass man in der Zugliste auch einen Zug auswählen kann, zu dem die Partie zurückspringt, sich einen Vorschlag holt und damit weiter spielen kann.

Geändert habe ich auch das Speichern und Laden der Spielstände von Partien. Auch wenn im letzten Zug Schwarz noch nicht gezogen hat, wird jetzt korrekt gespeichert und geladen. Nach dem Laden kann man, wie gewohnt, weiterspielen.

Beste Grüße
Mathematiker

_________________
Töten im Krieg ist nach meiner Auffassung um nichts besser als gewöhnlicher Mord. Albert Einstein