Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Colochessum Schach-GUI
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 27.12.2014, 21:06    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 27.12.2014, 23:24    Titel: Antworten mit Zitat

@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)! happy

(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. zwinkern


Es freut mich. lächeln


Da ist die neue Version des Programms:
http://www.eschecs.fr/fichiers/freebasic/random-uci-engine.zip
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 28.12.2014, 18:43    Titel: Antworten mit Zitat

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, 19:16, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 28.12.2014, 19:01    Titel: Antworten mit Zitat

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. grinsen

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 lachen ), 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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 28.12.2014, 19:32    Titel: Antworten mit Zitat

@nemored: Ja, ich denke, auf diese Sichtweise kann man sich einigen. lächeln 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 28.12.2014, 20:11    Titel: Antworten mit Zitat

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. lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 29.12.2014, 09:38    Titel: Antworten mit Zitat

Roland Chastain hat Folgendes geschrieben:
Aber ich wollte etwas von mir versuchen.
Verständlich. Viel Erfolg! lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 29.12.2014, 11:10    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
In dem Paket fehlt die Datei "pcre.bi".


Danke für deine Antwort.

Die Datei "pcre.bi" ist enhalten in FBC 1.00.0 Paket für Windows:
http://www.freebasic-portal.de/downloads/aktuelle-compiler/freebasic-1-00-0-fuer-windows-zip-archiv-335.html

Die Datei "libpcre.a" habe ich gefunden hier:
http://www.sarmardar.nl/FreeBASIC/libpcre.a
http://www.freebasic.net/forum/viewtopic.php?f=7&t=19935

P.-S. Die Datei "pcre.bi" ist also hier:
http://www.sarmardar.nl/FreeBASIC/pcre831.zip
http://www.freebasic.net/forum/viewtopic.php?f=14&t=20172
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 30.12.2014, 18:22    Titel: Antworten mit Zitat

Warum sagt mir denn keiner, daß es eine neue Version von fbc gibt? mit den Augen rollen Um alles muß man sich hier selber kümmern! grinsen grinsen grinsen

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 30.12.2014, 22:14    Titel: Antworten mit Zitat

Zitat:
Warum sagt mir denn keiner, daß es eine neue Version von fbc gibt? mit den Augen rollen

Im Chat steht es doch ganz groß in der Tagesmeldung. lachen
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 30.12.2014, 23:43    Titel: Antworten mit Zitat

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

lächeln


Zuletzt bearbeitet von Roland Chastain am 19.01.2015, 15:40, insgesamt 2-mal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 31.12.2014, 09:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 31.12.2014, 13:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 01.01.2015, 16:14    Titel: Antworten mit Zitat

Hallo Roland!

"random" hat jetzt problemlos ca. 50 Partien gegen verschiedene Engines gespielt (natürlich alle verloren grinsen ). 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 zwinkern ).

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 01.01.2015, 17:33    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
"random" hat jetzt problemlos ca. 50 Partien gegen verschiedene Engines gespielt (natürlich alle verloren grinsen ).


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. lächeln

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 01.01.2015, 18:03    Titel: Antworten mit Zitat

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. lächeln

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 01.01.2015, 18:41    Titel: Antworten mit Zitat

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. lächeln


Ja, sicherlich.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 03.01.2015, 15:44    Titel: Antworten mit Zitat

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? mit den Augen rollen


Zuletzt bearbeitet von Roland Chastain am 19.01.2015, 15:43, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 03.01.2015, 16:33    Titel: Antworten mit Zitat

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
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 03.01.2015, 16:58    Titel: Antworten mit Zitat

Vielen Dank, Sebastian.

happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
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.

 Impressum :: Datenschutz