|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 27.12.2014, 22:06 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Zum Quelltext: Es ist zwar alles wunderbar strukturiert und die Variablen haben "sprechende" Namen, trotzdem würden ein paar Kommentare das Verständnis sehr erleichtern. |
An dieser Stelle ein Link:
http://www.clean-code-developer.de/
(Ich war einmal an einem Java User Group-Vortrag zu diesem Thema)
In den sog. Clean Code-Praktiken wird sogar gesagt, dass Kommentar möglichst sparsam verwendet werden soll, stattdessen aussagekräftige Variablen- und Methodennamen.
@Roland Chastain: Da kannst Du Dich bereits für die dortigen Grade qualifizieren. ;-) _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 28.12.2014, 00:24 Titel: |
|
|
@grindstone
Vielen Dank!
grindstone hat Folgendes geschrieben: | Das Wichtigste zuerst: Wenn Colochessum versucht, durch senden von "position startpos moves" alles auf Anfang zu setzen, stürzt dein Programm im Modul game.GenerateLegalMoves() ab. |
Ich bin nicht sicher aber ich glaube dass, es ist korrigiert (1).
grindstone hat Folgendes geschrieben: | Außerdem müsste "random" in der Lage sein, einen UCI - Befehl wie "position fen 7K/6q1/7b/8/8/8/8/6k1 w - - 3 41 moves" (dieses Beispiel ist eine Mattstellung) korrekt zu verarbeiten, da Colochessum vor jedem Zug das aktuelle Boardsetup an die Engine sendet. |
Getan (1)!
(1) Sind wirklich "position startpos moves" und "position fen 7K/6q1/7b/8/8/8/8/6k1 w - - 3 41 moves" korrekte Befehle? Warum "moves", wenn es gibt kein Zug?
Wenn das Programm findet das Wort "moves", ich nehme an, dass es ein Zug oder Züge gibt. Vielleicht das ist warum das Programm stürzt ab.
@dreael
dreael hat Folgendes geschrieben: | @Roland Chastain: Da kannst Du Dich bereits für die dortigen Grade qualifizieren. |
Es freut mich.
Da ist die neue Version des Programms:
http://www.eschecs.fr/fichiers/freebasic/random-uci-engine.zip |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 28.12.2014, 19:43 Titel: |
|
|
dreael hat Folgendes geschrieben: | In den sog. Clean Code-Praktiken wird sogar gesagt, dass Kommentar möglichst sparsam verwendet werden soll, stattdessen aussagekräftige Variablen- und Methodennamen. | Das hört sich ja (zumindest beim ersten Überfliegen) alles sehr schön an, aber welchen Sinn soll das Weglassen von Kommentaren haben? Den Code für Außenstehende möglichst schwer verständlich zu machen? Keine Kommentare, stattdessen 50 Zeichen lange Variablennamen? Ganz ehrlich: Solche Puristen sind mir suspekt.
@Roland Chastain:
Das Schlüsselwort "moves" ist an dieser Stelle nicht notwendig, schadet aber auch nicht. Das gesamte UCI-Protokoll findest du hier. Die Beschreibung ist zwar nicht sehr übersichtlich, aber es steht alles drin.
Zur Absturzursache: Dein Programm stürzt im Modul game.GenerateLegalMoves() ab, wenn zuvor zum zweitenmal game.Initialize() aufgerufen wurde, also bei den Schlüsselwörtern "ucinewgame" und "startpos".
Außerdem solltest du zunächst einmal einen ordentlichen Stringparser bauen, der auch die Hierarchie der Schlüsselwörter korrekt verarbeitet. Ich habe mir diese Mühe schon einmal gemacht. Im Parser des Colochessum human interface sind alle Schlüsselwörter des UCI-Protokolls implementiert. Du kannst die DO ... LOOP - Schleife zusammen mit der Function StringNextItem() übernehmen und an dein Programm anpassen.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Zuletzt bearbeitet von grindstone am 28.12.2014, 20:16, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 28.12.2014, 20:01 Titel: |
|
|
grindstone hat Folgendes geschrieben: | dreael hat Folgendes geschrieben: | In den sog. Clean Code-Praktiken wird sogar gesagt, dass Kommentar möglichst sparsam verwendet werden soll, stattdessen aussagekräftige Variablen- und Methodennamen. | Das hört sich ja (zumindest beim ersten Überfliegen) alles sehr schön an, aber welchen Sinn soll das Weglassen von Kommentaren haben? Den Code für Außenstehende möglichst schwer verständlich zu machen? Keine Kommentare, stattdessen 50 Zeichen lange Variablennamen? Ganz ehrlich: Solche Puristen sind mir suspekt. |
Das mit den möglichst wenigen Kommentaren habe ich auch schon einmal gelesen - worin ich dem Autor zustimmen kann ist folgendes: es sollten sinnvollle Kommentare sein, also nicht das offensichtliche noch kommentieren, denn das kann das Lesen des Quellcodes noch erschweren.
Code: | i = i + 1 ' den Wert der Schleifenvariablen i um eins erhoehen |
Was nun offensichtlich ist und was nicht, sieht wohl jeder Programmierer wieder anders.
Ich denke also, der Hinweis "Kommentare so sparsam wie möglich" gilt eher für Programmierer, die gern seitenweise Kommentare schreiben - diejenigen, die sowieso ungern Kommentare schreiben (so wie ich ), müssen nicht noch zusätzlich reduzieren.
Man kann das vielleicht mit Wegweiser-Schildern vergleichen; wenn zu viele davon herumstehen, kennt man sich nicht mehr aus, aber ganz ohne findet man sich auch nicht zurecht. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 28.12.2014, 20:32 Titel: |
|
|
@nemored: Ja, ich denke, auf diese Sichtweise kann man sich einigen. Als abschreckendes Beispiel habe ich da immer die (fast) gänzlich unkommentierten Plugins aus dem Winamp SDK vor Augen. Damit kommt eigentlich nur jemand zurecht, der sich sowieso schon damit auskennt.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 28.12.2014, 21:11 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Das Schlüsselwort "moves" ist an dieser Stelle nicht notwendig, schadet aber auch nicht. |
Ja, einverstanden.
grindstone hat Folgendes geschrieben: | Außerdem solltest du zunächst einmal einen ordentlichen Stringparser bauen, der auch die Hierarchie der Schlüsselwörter korrekt verarbeitet. Ich habe mir diese Mühe schon einmal gemacht. Im Parser des Colochessum human interface sind alle Schlüsselwörter des UCI-Protokolls implementiert. Du kannst die DO ... LOOP - Schleife zusammen mit der Function StringNextItem() übernehmen und an dein Programm anpassen. |
Sehr nützlich Beispiel. Aber ich wollte etwas von mir versuchen.
Heute habe ich etwas gemacht mit reguläre Ausdrücken:
Code: | #include "regex.bi"
const PATTERN = "[1-8BKNPQRbknpqr]+"
const FEN_RECORD_PATTERN = _
PATTERN & "/" & PATTERN & "/" & _
PATTERN & "/" & PATTERN & "/" & _
PATTERN & "/" & PATTERN & "/" & _
PATTERN & "/" & PATTERN & _
"\s[wb]\s[KQkq\-]+\s[a-h36\-]+\s\d+\s[1-9]\d*"
const MOVE_PATTERN = "[a-h][1-8][a-h][1-8][nbrq]*"
declare sub ExtractStrings(byval aPattern as string, byval aBuffer as string, aArray() as string, aPreserve as integer = 0)
const SAMPLE = "position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves e2e4 e7e5"
dim a() as string
ExtractStrings(FEN_RECORD_PATTERN, SAMPLE, a())
print(str(ubound(a) - lbound(a) + 1))
for i as integer = lbound(a) to ubound(a)
print(a(i))
next i
ExtractStrings(MOVE_PATTERN, SAMPLE, a())
print(str(ubound(a) - lbound(a) + 1))
for i as integer = lbound(a) to ubound(a)
print(a(i))
next i
sleep
sub ExtractStrings(byval aPattern as string, byval aBuffer as string, aArray() as string, aPreserve as integer = 0)
dim re as regex_t
dim pm as regmatch_t
dim pbuff as zstring ptr
dim res as integer
pbuff = strptr(aBuffer)
regcomp(@re, aPattern, 0)
res = regexec(@re, pbuff, 1, @pm, 0)
if not aPreserve then
erase aArray
end if
do while res = 0
redim preserve aArray(lbound(aArray) to ubound(aArray) + 1)
aArray(ubound(aArray)) = mid(*pbuff, 1 + pm.rm_so, pm.rm_eo - pm.rm_so)
pbuff += pm.rm_eo
res = regexec(@re, pbuff, 1, @pm, REG_NOTBOL)
loop
regfree(@re)
end sub |
grindstone hat Folgendes geschrieben: | Zur Absturzursache: Dein Programm stürzt im Modul game.GenerateLegalMoves() ab, wenn zuvor zum zweitenmal game.Initialize() aufgerufen wurde, also bei den Schlüsselwörtern "ucinewgame" und "startpos". |
Danke. Es gibt neue Dateien. Ich werde testen mit Colochessum. Mit Arena es funktioniert. |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 29.12.2014, 10:38 Titel: |
|
|
Roland Chastain hat Folgendes geschrieben: | Aber ich wollte etwas von mir versuchen. | Verständlich. Viel Erfolg!
Zitat: | Es gibt neue Dateien. | In dem Paket fehlt die Datei "pcre.bi".
Zitat: | Ich werde testen mit Colochessum. | Damit die Engine mit Colochessum läuft, muß neben "uci", "go", und "fen" mindestens noch "startpos" und "moves ..." (mit der darauffolgenden Liste aller bisherigen Züge) funktionieren.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 30.12.2014, 19:22 Titel: |
|
|
Warum sagt mir denn keiner, daß es eine neue Version von fbc gibt? Um alles muß man sich hier selber kümmern!
@Roland Chastain:
Nachdem ich die neuesete Version von fbc installiert (danke für den Hinweis) und "libpcre.a" heruntergeladen habe (wozu eigentlich?) läuft ramdom mit Colochessum (zumindest stürzt es nicht mehr ab). Ganz sauber läuft es allerdings auch nicht, nach ein paar Zügen fängt es an zu spinnen. Probier es am besten selber aus.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 30.12.2014, 23:14 Titel: |
|
|
Zitat: | Warum sagt mir denn keiner, daß es eine neue Version von fbc gibt? |
Im Chat steht es doch ganz groß in der Tagesmeldung. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 31.12.2014, 00:43 Titel: |
|
|
grindstone hat Folgendes geschrieben: | und "libpcre.a" heruntergeladen habe (wozu eigentlich?) |
Da ist was ich mache mit regulären Ausdrücken. (Ich habe "regex.bi" mit "pcre.bi" ersetzen.)
Code: | ' match.bas
#include "pcre.bi"
const MOVE_PATTERN = "[a-h][1-8][a-h][1-8][nbrq]*"
const FEN_RECORD_PATTERN = _
"[1-8BKNPQRbknpqr]+" & "/" & _
"[1-8BKNPQRbknpqr]+" & "/" & _
"[1-8BKNPQRbknpqr]+" & "/" & _
"[1-8BKNPQRbknpqr]+" & "/" & _
"[1-8BKNPQRbknpqr]+" & "/" & _
"[1-8BKNPQRbknpqr]+" & "/" & _
"[1-8BKNPQRbknpqr]+" & "/" & _
"[1-8BKNPQRbknpqr]+" & _
"\s" & "[wb]" & _
"\s" & "([KQkq]+|\-)" & _
"\s" & "([a-h][36]|\-)" & _
"\s" & "\d+" & _
"\s" & "[1-9]\d*"
/'
declare function ExtractStrings(byval aPattern as string, byval aBuffer as string, aArray() as string, aPreserve as integer = 0) as integer
const SAMPLE = "position fen rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves e2e4 e7e5 d2d4 d7d5"
dim a() as string
if ExtractStrings(FEN_RECORD_PATTERN, SAMPLE, a()) = ubound(a) - lbound(a) + 1 then
for i as integer = lbound(a) to ubound(a)
print(a(i))
next i
end if
if ExtractStrings(MOVE_PATTERN, SAMPLE, a()) = ubound(a) - lbound(a) + 1 then
for i as integer = lbound(a) to ubound(a)
print(a(i))
next i
end if
sleep
'/
function ExtractStrings(byval aPattern as string, byval aBuffer as string, aArray() as string, aPreserve as integer = 0) as integer
const OVECCOUNT = 300
dim as zstring ptr errmsg
dim as integer erroffset
dim as integer rc, i
dim as integer ovector(OVECCOUNT - 1)
dim as integer result
dim as pcre ptr re
if not aPreserve then
erase aArray
end if
result = 0
re = pcre_compile(aPattern, 0, @errmsg, @erroffset, NULL)
if re = NULL then
return result
end if
i = 0
do
rc = pcre_exec(re, NULL, strptr(aBuffer), len(aBuffer), i, 0, @ovector(0), OVECCOUNT)
if rc > 0 then
redim preserve aArray(lbound(aArray) to ubound(aArray) + 1)
aArray(ubound(aArray)) = mid(aBuffer, ovector(0) + 1, ovector(1) - ovector(0))
result += 1
i = ovector(1)
end if
loop while rc >= 0
return result
end function
|
Code: | ' random.bas
#include "extract.bas"
...
dim as string s, ss()
do
input(s)
...
if instr(s, "moves") then
ExtractStrings(MOVE_PATTERN, s, ss())
for i as integer = lbound(ss) to ubound(ss)
if game.FindMove(ss(i)) then
game.DoMove(ss(i))
game.GenerateLegalMoves()
else |
Ich habe einen grossen Fehler korrigiert in SortLegalMoves() Prozedur.
Random
Zuletzt bearbeitet von Roland Chastain am 19.01.2015, 16:40, insgesamt 2-mal bearbeitet |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 31.12.2014, 10:24 Titel: |
|
|
Soweit läuft random schon ganz gut, nur nach einer Bauernumwandlung (egal, von welcher Seite) kommt die Engine aus dem Tritt. Offenbar wird die 5stellige Zugbeschreibung (also z.B. e7e8q) nicht korrekt verarbeitet.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 31.12.2014, 14:47 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Soweit läuft random schon ganz gut, nur nach einer Bauernumwandlung (egal, von welcher Seite) kommt die Engine aus dem Tritt. Offenbar wird die 5stellige Zugbeschreibung (also z.B. e7e8q) nicht korrekt verarbeitet. |
Ja, richtig. Danke für die Hilfe. Nun es ist getan (ZIP). |
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 01.01.2015, 17:14 Titel: |
|
|
Hallo Roland!
"random" hat jetzt problemlos ca. 50 Partien gegen verschiedene Engines gespielt (natürlich alle verloren ). Ob alle Züge legal waren, kann ich nicht sagen, aber das hat mich auf die Idee gebracht, eine entsprechende Funktion in Colochessum einzubauen. Und auch die Probleme mit meinem "human interface" konnte ich dank des leichten Gegners beheben (das hoffe ich zumindest ).
Trotzdem bin ich erstaunt über die Spielstärke von "random". Selbst "Houdini 1.5a w32", die stärkste Engine aus meiner Sammlung, braucht im Schnitt 10 - 12 Züge, um zu gewinnen.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 01.01.2015, 18:33 Titel: |
|
|
grindstone hat Folgendes geschrieben: | "random" hat jetzt problemlos ca. 50 Partien gegen verschiedene Engines gespielt (natürlich alle verloren ). |
Gut! Danke für testen.
grindstone hat Folgendes geschrieben: | Ob alle Züge legal waren, kann ich nicht sagen, aber das hat mich auf die Idee gebracht, eine entsprechende Funktion in Colochessum einzubauen. |
Es wäre möglich "chess.bas" zu benutzen.
Code: |
' istZugLegal.bas
#include "chess.bas"
' http://www.eschecs.fr/fichiers/freebasic/random-uci-engine.zip
dim as string _
myPosition = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", _
myMove = "e2e4"
dim game as chess.TGame
game.Initialize(myPosition)
game.GenerateLegalMoves()
print(game.FindMove(myMove)) ' -1
print(game.FindMove("e7e5")) ' 0
sleep
|
|
|
Nach oben |
|
|
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1211 Wohnort: Ruhrpott
|
Verfasst am: 01.01.2015, 19:03 Titel: |
|
|
Einen Fehler habe ich noch entdeckt: Bei einer Bauernumwandlung fehlt bei der Zugbeschreibung der Hinweis, in welche Figur der Bauer umgewandelt werden soll (also beispielsweise c2c1q). Der Bauer verhält sich dann zwar wie die neue Figur, für die GUI (und auch für den Gegner) bleibt die Figur aber ein Bauer.
Zur Legalitätsprüfung: Ich habe schon ein fertiges Unterprogramm dafür, allerdings im human interface und nicht in Colochessum selbst. Ich muß es nur noch rüberkopieren und einbinden. Aber es wäre vielleicht eine gute Idee, zumindest eine Zeitlang beide Routinen parallel laufen zu lassen, damit sie sich gegenseitig kontrollieren und so vielleicht doch den einen oder anderen Fehler aufzudecken.
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 01.01.2015, 19:41 Titel: |
|
|
grindstone hat Folgendes geschrieben: | Einen Fehler habe ich noch entdeckt: Bei einer Bauernumwandlung fehlt bei der Zugbeschreibung der Hinweis, in welche Figur der Bauer umgewandelt werden soll (also beispielsweise c2c1q). |
Getan. Danke!
Code: | function TGame.RandomMove() as string
dim i as integer
if movesNumber = 0 then
return "0000"
else
i = RandomInt(1, movesNumber)
if IsPromotion(moves(i)) then
return MovToStr(moves(i)) & mid("nbrq", RandomInt(1, 4), 1)
else
return MovToStr(moves(i))
end if
end if
end function |
Bitte siehe neue Dateien.
grindstone hat Folgendes geschrieben: | Aber es wäre vielleicht eine gute Idee, zumindest eine Zeitlang beide Routinen parallel laufen zu lassen, damit sie sich gegenseitig kontrollieren und so vielleicht doch den einen oder anderen Fehler aufzudecken. |
Ja, sicherlich. |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 03.01.2015, 16:44 Titel: |
|
|
Ich bräuchte eine Beschreibung meines Programms für eine FreeBASIC Portal Seite. Da ist das Text das ich geschrieben habe.
Code: | ================================================================================
RANDOM
UCI engine playing random moves
================================================================================
Random is a UCI chess engine which plays random moves. It was written as an
first experimentation of the UCI protocol from the engine side. It has been
tested successfully with Arena, ChessPartner, Tarrasch and Colochessum.
Roland Chastain, Sarreguemines (FRANCE), 2015.
FreeBASIC Compiler 1.00.0.
Useful links:
Arena Chess GUI
http://www.playwitharena.com/
ChessPartner
http://www.lokasoft.nl/chesspartner.aspx
The Tarrasch Chess GUI
http://www.triplehappy.com/
FreeBASIC code examples
http://free-basic.ru/chess_fruit.html
http://www.freebasic-portal.de/projekte/colochessum-84.html
Regular expressions library
http://www.sarmardar.nl/FreeBASIC/pcre831.zip
http://www.sarmardar.nl/FreeBASIC/libpcre.a |
Könnte jemand auf deutsch übersetzen bitte?
Zuletzt bearbeitet von Roland Chastain am 19.01.2015, 16:43, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 03.01.2015, 17:33 Titel: |
|
|
Hallo Roland,
hier mal mein Übersetzungsvorschlag:
Code: | ================================================================================
RANDOM
UCI-Engine für zufällige Spielzüge
================================================================================
Random ist eine UCI-Schach-Engine, die zufällige Züge spielt. Sie wurde als ein erstes Experiment mit dem UCI-Protokoll (von der Engine-Seite her) geschrieben. Die Engine wurde erfolgreich getestet mit Arena, ChessPartner, Tarrasch und Colochessum.
Roland Chastain, Sarreguemines (FRANCE), 2015.
FreeBASIC Compiler 1.00.0.
Nützliche Links:
Arena Chess GUI
http://www.playwitharena.com/
ChessPartner
http://www.lokasoft.nl/chesspartner.aspx
The Tarrasch Chess GUI
http://www.triplehappy.com/
FreeBASIC Code-Beispiele
http://free-basic.ru/chess_fruit.html
http://www.freebasic-portal.de/projekte/colochessum-84.html
Bibliothek für reguläre Ausdrücke (regular expressions)
http://www.sarmardar.nl/FreeBASIC/pcre831.zip
http://www.sarmardar.nl/FreeBASIC/libpcre.a |
Viele Grüße & ein schönes Wochenende!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 03.01.2015, 17:58 Titel: |
|
|
Vielen Dank, Sebastian.
|
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|