Not logged inCSS-Forum
Forum CSS-Online Help Search Login
CSS-Shop Impressum Datenschutz
Up Topic Hauptforen / CSS-Forum / selbstgeschriebene Engine
- - By Swen Eichmann Date 2013-04-05 13:00
Hallo

Ich schreibe derzeit eine eigene Engine in Delphi. Im Prinzip funktioniert die Engine auch schon. Man kann mit ihr spielen, wenn man das Konsolenprogramm öffnet und dort die UCI Daten eingibt. Allerdings möchte ich auch, dass mit Arena bewerkstelligen. Ich ging davon aus, dass es genügt, mit writeln() die Antworten an die GUI zu geben bzw. einfach nur den Text auszugeben damit die GUI ihn dann ausliest. Aber offenbar nicht.
Arena gibt die Kommandos an die Engine weiter und diese verarbeitet auch die Daten. Aber offenbar kann die GUI den Text in der Engine nicht "empfangen".
Teilweiße habe ich den Eindruck, das die GUI einfach nicht "wartet" beim auslesen. Die Engine zwar den Text ausgibt, die GUI aber nicht mehr ausliest. Das ist aber nur ein Eindruck und kann ich so direkt nicht bestätigen.

Hat jemand eine Idee, weshalb das so ist? Ist die Textausgabe mit writeln() nicht der richtige Weg? Oder muss ich noch irgendwas besonderes beachten bei den UCI Kommandos?? (Leerzeichen am Ende? Zwei Leerzeilen am Ende? ... Wobei ich hier auch schon experementiert habe...)

Gruß Swen

P. S. Gibt es hier noch andere Hobby Programmierer?
Parent - By Thorsten Hermann Date 2013-04-05 15:38
Ich hab vor einer ganzen Weile mal von der anderen Seite (also einer GUI) dran rumgebastelt und dabei festgestellt, daß das UCI-Protokoll so seine Tücken hat. Vermutlich ist Dein Output nicht 100% kompatibel. Evtl. gibt es auch Probleme mit der Redirection des Streams; ob Delphi sich da mit den meist in C++ oder C# geschriebenen GUIs beißt, keine Ahnung.

Mein Tip wäre, mal von der anderen Seite zu debuggen, was überhaupt in der GUI ankommt. Gibt ein paar brauchbare und übersichtliche Opensource-Projekte, z.B. http://sourceforge.net/projects/ucichesstrainer/

Das hier ist ein (fast) reines Anwenderforum. Auf Deine Fragen wirst Du eher in einem Forum wie talkchess.com Antworten finden.
Parent - By Manfred Rosenboom Date 2013-04-05 17:36
Du könntest mal (allerdings in Englisch oder Spanisch) bei Andres Valverde nachfragen: http://webs.ono.com/a.valverde/eveann.htm der programmiert auch in Delphi. Er unterstützt zwar das Winboard Protokoll aber da dürfte es ähnliche Probleme (lesen/schreiben von stdin/stdout) geben.

Gruß,
Manfred
Parent - By Franz Huber Date 2013-04-05 17:36
Hallo Swen,

also ich habs bei ChestUCI (auch in Delphi geschrieben) folgendermaßen gemacht:

1) ich verwende ein Array zur Ausgabe:

var Aus:array[1..16384] of char;

2) dann eine eigene Prozedure (wobei der Flush-Befehl wichtig ist, denn der garantiert
dass jeder UCI-String auch wirklich sofort an die GUI gesendet wird:

procedure WriteUCI(s:ansistring);
begin
  WriteLn(Output,s);
  Flush(Output);
end;

3) Nun noch bei Programmbeginn den Puffer für die Ausgabe initialisieren:

SetTextBuf(Output,Aus);
Rewrite(Output);

4) Und danach kannst Du UCI-Befehle folgendermaßen ausgeben:

WriteUCI(.....);

Viel Erfolg mit Deiner Engine,
Franz
Parent - By Swen Eichmann Date 2013-04-06 07:18
Vielen Dank für die Antworten.

Franz, der Tipp mit dem Flush ist gold wert. Genau daran lag es! Nun kommt auch auf der GUI Seite was an. Vielen Dank Franz.

Liebe Grüße,
Swen
Up Topic Hauptforen / CSS-Forum / selbstgeschriebene Engine

Powered by mwForum 2.29.3 © 1999-2014 Markus Wichitill