Schachcomputer.info Community

Schachcomputer.info Community (https://www.schachcomputer.info/forum/index.php)
-   Mess Emu & andere Emulationen / Mess Emu and other Emulations (https://www.schachcomputer.info/forum/forumdisplay.php?f=53)
-   -   MessEmu: MessChess und Winboard (https://www.schachcomputer.info/forum/showthread.php?t=5988)

fhub 01.08.2019 12:37

MessChess und Winboard
 
Zitieren:

Zitat von Didi (Beitrag 83137)
Ich starte unter Winboard die beiden Programme, die schalten sich automatich in den Memory Modus. Ich lade die Partie unter Winboard und Winboard schickt die Züge an die beiden Programme. Nach dem letzten übertragenden Zug, soll nun der Memory Modus mit der CL-Taste beendet werden und die Partie gestartet werden.

Also ich hab jetzt mal versucht, das in Winboard nachzuvollziehen (hab dafür extra Dein setpos() eingebaut), aber da ich keinerlei Erfahrung mit diesen Enginematches habe, hat es leider nicht funktioniert.

Wie ist denn die Reihenfolge in Winboard genau?
Du startest Winboard und wählst gleich beide Engines in den beiden Listen aus. Danach ist in ja Winboard im Menü 'Mode' erstmal die Option 'Machine Black' aktiviert.
1.Versuch: Wenn ich da jetzt 'Two Machines' aktiviere, dann zeigt die erste Engine STA in der Anzeige, und in Winboard kann ich aber im Menü 'File' keine Partie mehr laden!?

2.Versuch: Wenn ich allerdings vorher (d.h. vor Umschalten auf 'Two Machines') schon die Partie lade, dann meldet Engine 1 kurz ein Err2 und zeigt dann wieder MEMO an, scheint danach aber die Züge aus der Partie von Winboard übermittelt zu bekommen.
Danach schalte ich auf 'Two Machines' um, und jetzt erscheint auch Engine 2 und bekommt die Züge nun ebenfalls von Winboard.

Jetzt ist also anscheinend dieser Zustand erreicht, wo beide Engines die Vorgabestellung auf dem Brett haben, und wo Du gerne hättest, daß es automatisch weitergeht, d.h. jetzt Engine 1 von selbst weiterzuspielen beginnt, stimmt das bis jetzt so?
(diesen Fehler Err2 verstehe ich allerdings noch nicht)

Nun, manuell muß man jetzt bei beiden Engines CL drücken (um den MEMO-Modus zu beenden), aber zusätzlich auch noch bei Engine 1 die Taste ENT, weil diese jetzt ja zu spielen beginnen soll.

Ich frage mich allerdings, WIE man das automatisieren soll (im LUA-Script), denn woher sollen die Engines wissen, daß nach dieser Zugfolge jetzt Schluß ist mit den Vorgabezügen? Das müßte ja Winboard irgendwie den beiden LUA-Scripts mitteilen, damit diese dann die nötigen Tasten 'drücken' können.
Also müßte da eher in Winboard irgendwas geändert werden als in den LUA-Dateien ...

Hartmut 01.08.2019 13:25

AW: MessChess und Winboard
 
Bei Winboard ist das Hauptproblem, dass man mit Starten des Programms schon Engines definieren muss. Allerdings könnte ich mir - rein theoretisch - folgendes Scenario vorstellen:

Ich lade z.B. in Winboard eine PGN-Datei und starte DANACH eine Engine. Diese Engine könnte doch jetzt per Script (also lua) überprüfen ob eine solche PGN oder eine Zugliste in Winboard existiert, in den Memory-Modus springen, und die Züge nacheinander einlesen. Da in einer PGN-Datei das Ende einer Zugliste meist durch einen "*" gekennzeichnet ist, könnte dies doch dann als quasi "end of file"-Bedingung gelten und dadurch veranlasst werden, dass nun per Script aus dem Memory-Modus herausgesprungen wird. Ich kenne mich mit lua leider nicht genug aus um zu wissen, ob das so zu verwirklichen ist, aber es wäre zuerst mal eine Grundidee...

So wie Didi es beschreibt, hat er es ja irgendwie geschafft, dass die Engines geladen werden und auch die Eingabe der Position erfolgt. Also muss es ja auch irgendwie möglich sein in der bestehenden Zugliste ein EOF zu erkennen. Dazu müssten wir aber ein Beispielscript einer Engine haben wo er diesen Setup-Modus eingebaut hat. Ansonsten kommen wir vermutlich nicht weiter.

Didi 01.08.2019 13:42

AW: MessChess und Winboard
 
Ja, genauso läuft das ganze unter Winboard.
Die Fehlermeldung wird ja ignoriert, somit läuft das alles dann normal weiter. Andere Schachprogramme ignorieren das komplett.
Ich denke, dass Winboard da etwas schickt, um dem Programm mitzuteilen, dass jetzt eine Zugfolge gesendet wird. Und vielleicht sendet Winboard auch etwas, um das Ende der Zugfolge mitzuteilen. Genau diese beiden Befehle müsste man im LUA Script abfangen. Dann könnte man das komplett automatisieren.

fhub 01.08.2019 13:43

AW: MessChess und Winboard
 
Zitieren:

Zitat von Hartmut (Beitrag 83152)
Bei Winboard ist das Hauptproblem, dass man mit Starten des Programms schon Engines definieren muss.

Also das stimmt schon mal nicht - Du kannst WinBoard auch ohne Engine(s) starten (mit 'Just view or edit game files' im Startfenster) und danach in WinBoard mit 'Engine -> Load First/Second Engine' die Engine(s) nachladen.
Zitieren:

Allerdings könnte ich mir - rein theoretisch - folgendes Scenario vorstellen:

Ich lade z.B. in Winboard eine PGN-Datei und starte DANACH eine Engine. Diese Engine könnte doch jetzt per Script (also lua) überprüfen ob eine solche PGN oder eine Zugliste in Winboard existiert, ...
Wie soll denn das gehen? Wie soll das LUA-Script Winboard 'fragen', ob eine Zugliste vorliegt? Dafür wäre nicht nur Code im LUA-Script nötig, sonder auch entsprechende 'Vorkehrungen' in WinBoard, damit eine solche Kommunikation überhaupt stattfinden kann - in WinBoard ist sowas einfach nicht vorgesehen, da geht's um reinen Austausch von WB-Befehlen.

Didi 01.08.2019 13:48

AW: MessChess und Winboard
 
1 Anhang/Anhänge
Zitieren:

Zitat von Hartmut (Beitrag 83152)
Bei Winboard ist das Hauptproblem, dass man mit Starten des Programms schon Engines definieren muss. Allerdings könnte ich mir - rein theoretisch - folgendes Scenario vorstellen:

Ich lade z.B. in Winboard eine PGN-Datei und starte DANACH eine Engine. Diese Engine könnte doch jetzt per Script (also lua) überprüfen ob eine solche PGN oder eine Zugliste in Winboard existiert, in den Memory-Modus springen, und die Züge nacheinander einlesen. Da in einer PGN-Datei das Ende einer Zugliste meist durch einen "*" gekennzeichnet ist, könnte dies doch dann als quasi "end of file"-Bedingung gelten und dadurch veranlasst werden, dass nun per Script aus dem Memory-Modus herausgesprungen wird. Ich kenne mich mit lua leider nicht genug aus um zu wissen, ob das so zu verwirklichen ist, aber es wäre zuerst mal eine Grundidee...

So wie Didi es beschreibt, hat er es ja irgendwie geschafft, dass die Engines geladen werden und auch die Eingabe der Position erfolgt. Also muss es ja auch irgendwie möglich sein in der bestehenden Zugliste ein EOF zu erkennen. Dazu müssten wir aber ein Beispielscript einer Engine haben wo er diesen Setup-Modus eingebaut hat. Ansonsten kommen wir vermutlich nicht weiter.

Hier die Datei mm4.txt. Einfach umbennen in mm4.lua und am besten mit "Notepad++" editieren. Die Datei kommt in das Verzeichniss:

C:\CB-Emu\MessChess\plugins\chessengine\interfaces

Starten unter Winboard Mephisto MMIV als Engine 1 und Engine 2.

Hartmut 01.08.2019 13:49

AW: MessChess und Winboard
 
Zitieren:

Zitat von fhub (Beitrag 83154)
Also das stimmt schon mal nicht - Du kannst WinBoard auch ohne Engine(s) starten (mit 'Just view or edit game files' im Startfenster) und danach in WinBoard mit 'Engine -> Load First/Second Engine' die Engine(s) nachladen.

Stimmt natürlich. Mach ich nur bei meinen Enginewettkämpfen so gut wie nie, daher hatte ich das jetzt nicht im Fokus... mein Fehler

Zitieren:

Wie soll denn das gehen? Wie soll das LUA-Script Winboard 'fragen', ob eine Zugliste vorliegt?
Wie das gehen soll, weiss ich auch nicht. Ich habe allerdings Didis Post so verstanden, dass ja wohl irgendeine Kommunikation stattfindet, die Engine in den Memory-Modus geschickt wird, und irgendwas danach passiert (Übertragung der Züge?). Nur gehen die Programme danach aus dem Memory-Modus nicht mehr raus. Und das müsste ja über eine EOF-Abfrage zu klären sein. Kann natürlich sein, dass ich Didis Post hier völlig falsch verstanden habe. Wie gesagt, es hilft nichts, wir bräuchten ein Beispielscript um zu sehen was passiert...

Edit: Ups, Didi war schneller... wir haben ein Beispielscript, lach

Didi 01.08.2019 13:56

AW: MessChess und Winboard
 
"Wie soll denn das gehen? Wie soll das LUA-Script Winboard 'fragen', ob eine Zugliste vorliegt?"

Genau darum gehts ja...

fhub 01.08.2019 13:58

AW: MessChess und Winboard
 
Zitieren:

Zitat von Didi (Beitrag 83153)
Ja, genauso läuft das ganze unter Winboard.

Ok, dann hab ich es ja zufälligerweise richtig gemacht. ;)
Zitieren:

Ich denke, dass Winboard da etwas schickt, um dem Programm mitzuteilen, dass jetzt eine Zugfolge gesendet wird.
Also da bin ich mir nicht so sicher: wenn ich selber im MEMO-Modus eine Zugfolge in Winboard eingebe (mit 'Mode -> Edit Game'), am Ende dann selbst auf CL in der Engine klicke, und danach in Winboard z.B. auf 'Mode -> Machine is White' umschalte, dann tut sich bei der Engine rein gar nichts, d.h. Winboard schickt bei dieser Umschaltung keinerlei Befehl an die Engine - man muß selber erst ENT drücken, damit die Engine wirklich startet.

Das Problem dabei ist, daß es in WinBoard keine Option gibt (so wie mit F4 in Arena), mit der man die ganz Kommunikation zwischen Winboard und Engine mitverfolgen kann - damit wäre es sicher einfacher, evt. eine Lösung für dieses Problem zu finden.

fhub 01.08.2019 14:03

AW: MessChess und Winboard
 
Zitieren:

Zitat von Hartmut (Beitrag 83156)
Ich habe allerdings Didis Post so verstanden, dass ja wohl irgendeine Kommunikation stattfindet, die Engine in den Memory-Modus geschickt wird, und irgendwas danach passiert (Übertragung der Züge?). Nur gehen die Programme danach aus dem Memory-Modus nicht mehr raus. Und das müsste ja über eine EOF-Abfrage zu klären sein.

Nee, so eine EOF-Abfrage ist deswegen nicht möglich, weil ja nicht die Engine (bzw. das Script) aus der PGN-Datei liest oder selbst Winboard nach Zügen fragt, sondern Winboard liest die Datei und sendet die Züge an das Script.
Und wenn Winboard das Ende der Zugliste eben nicht irgendwie dem Script mitteilt (und das tut es nicht), dann weiß eben die Engine von diesem Ende nichts.

Hartmut 01.08.2019 14:19

AW: MessChess und Winboard
 
Zitieren:

Zitat von fhub (Beitrag 83159)
Nee, so eine EOF-Abfrage ist deswegen nicht möglich, weil ja nicht die Engine (bzw. das Script) aus der PGN-Datei liest oder selbst Winboard nach Zügen fragt, sondern Winboard liest die Datei und sendet die Züge an das Script.
Und wenn Winboard das Ende der Zugliste eben nicht irgendwie dem Script mitteilt (und das tut es nicht), dann weiß eben die Engine von diesem Ende nichts.

Hm... die ursprüngliche Emulation, die vor Deiner Zeit erstellt wurde - also die, die ganz am Anfang mit nur einigen wenigen Mephisto-Engines unter Arena eingebunden war (das war mit Hilfe einer Mess-Tiny) konnte das. Sowohl mit den UCI-Versionen als auch mit den Winboard-Versionen. Wenn ich da eine abgespeicherte Partie öffne und z.B. die alte MM IV-Emulation starte, springt er automatisch in den Memory-Modus und liest die Zugliste ein. Wie das allerdings funktioniert hat... keine Ahnung. Damals gab es die luas ja noch nicht. Kann natürlich sein, dass er das in diesem Mess-Tiny irgendwie direkt verbaut hat, aber das weiss ich natürlich nicht. Bei Deiner Emu wäre das - selbst wenn es rein theoretisch machbar wäre - zwischenzeitlich schon allein angesichts der Menge an Emus (und es kommen ja immer noch welche dazu) eine Herkulesaufgabe. Sofern es also nicht doch noch durch die Hintertür irgendwie scriptmäßig zu lösen ist, können wir das wohl vergessen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:08 Uhr.

Powered by vBulletin (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
©Schachcomputer.info