[Läuft] µitLight Dezember '10/Januar '11

  • Hallo allerseits!

    Vielen Dank euch dreien für die ausführlichen Fehlerbeschreibungen. Ich habe versucht, alle Fehler zu beheben!

    Engine/KI: Ich werde die Beschreibungen anpassen.
    Eröffnungsbibliothek: So war es auch gar nicht gemeint! Ich möchte nur Copy&Paste verhindern. Man sollte sich selbst hinsetzen und z.B. die Datenbank selbst gestalten, aber nicht aus einer bestehenden einfach kopieren.
    Kommentare: Wurden überarbeitet.

    Viele weitere Verbesserungen, trennen von Altlasten und ein paar neue Funktionen.

    Zum "zu viele Fehler": Wie Cyberdyne bereits klar gestellt hat, geht es zunächst darum, die Fehler zu beseitigen. Mein letztes AutoIt-Programm ist uralt und da auch die Ressource Zeit limitiert ist, kann ich kein vollständiges Debug machen. Außerdem will ich von euch wissen, was ihr braucht. Deshalb habt ihr am Ende auch mehr Zeit. Es tut mir Leid, dass du nicht mehr mit machen möchtest, aber meiner Meinung nach verbessert sich das Skript. Der Vorteil der Interface.au3: Wenn jemand die Muse hat, die Schach.au3 neu zu machen, kann er die bestehenden Teilnehmer-Skripte einfach mit benutzen. Ich bitte dich, deine Entscheidung doch nochmal zu überdenken, und vielleicht hast du ja doch noch Lust...

    Viele Grüße,
    Matthias

    P.S.: Fehlersuche wird fortgesetzt ;)

    Edit: Achja, $gFeld wird nun auch angepasst.
    Und:

    @pee: Sorry, ich war mir sicher, dir bereits geantwortet zu haben: Du hattest doch mal eine Engine in Java geschrieben. Ich fände es hierbei sehr interessant, die mal mit AutoIt zu vergleichen: Welche ist "besser". Darüber hinaus ist die Grundlage ja die selbe, ich würde mich freuen, wenn du dein Projekt "übersetzt"...


  • P.S.: Fehlersuche wird fortgesetzt ;)


    ...und weiter gehts! :D

    • Bei [autoit]Func __Chess_Umwandlung($Color, $Feld)[/autoit]
      müssen die beiden Zeilen
      [autoit]$aChessmanW[$who[1]][3] = $wish[/autoit]
      so abgeändert werden
      [autoit]$aChessmanW[$who[1]][0] = $wish[/autoit]
      da sonst bei der Umwandlung (genauer gesagt: Sobald man die Umwandlungs-InputBox schließt) das Skript abbricht.

      Code
      ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    • [Edit 1]
    • Gib mal in die Inputbox nur "set" ein...
      ...ja, schon wieder ^^

      Du hast zwar den ursprünglichen Fehler behoben, indem du prüfst ob

      [autoit]

      $array[0] > 2

      [/autoit]


      ist, aber die Zeile

      [autoit]

      Local $who = __Chess_Wer_Auf_Feld($array[2])

      [/autoit]


      wird noch vor der Prüfung der Arraygröße ausgeführt.

      [autoit]


      If $array[1] = "set" Then
      Local $who = __Chess_Wer_Auf_Feld($array[2])
      If $who[0] == $gPlayerColor And $array[0] > 2 Then
      If __Chess_Set($array[2], $array[3], True) Then $HumanTurn = False

      [/autoit]


      => Skript bricht ab.

      Code
      ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    • [Edit 2]
    • Drück mal auf den "Befehle..."-Button und danach auf Ok um den Hinweis zu schließen.
      Führe dann einen "set a2 a3" Befehl aus:
      => Der Zug wird ausgeführt. (<= OK)
      => Der Hinweis (vom "Befehle..."-Button) erscheint wieder (<= ERROR)
    • Der Vergleichswert im Case-Zweig wurde falsch angewendet. So wie es jetzt ist, wird immer der 1. Case-Zweig ausgeführt. (Nicht leerer String ist immer True)
      [autoit]Func _Chess_Who($Color, $Number)
      Switch $Color
      Case "w" Or "W"
      Return $aChessmanW[$Number][2]
      Case "b" Or "B"
      Return $aChessmanB[$Number][2]
      [/autoit]
      So ist's richtig
      [autoit]Case "w", "W"[/autoit]
    • Gebe "set a2 a8" ein.
      => schickt den a-Bauer auf die gegnerische Grundlinie (<= OK)
      Es kommt eine Input-Box, inder ich nach der Umwandlung gefragt werde. Wähle D für Dame.
      => Dame erscheint auf a8 (<= OK)
      set a8 a2
      => Dame springt zurück nach a2 (<= OK)
      set a2 a8
      => schickt die Dame auf die gegnerische Grundlinie (<= OK)
      Es kommt eine Input-Box, inder ich nach der Umwandlung gefragt werde. (<= ERROR)
    • [Edit 3]
    • Gebe "restart b" ein.
      set a7 a1
      => schickt den a-Bauer (diesmal schwarz) auf die gegnerische Grundlinie (<= OK)
      Es kommt eine Input-Box, inder ich nach der Umwandlung gefragt werde. Wähle D für Dame.
      => Es erscheint ein weißer Bauer (<= ERROR)
      set a1 a3
      => Erst nach diesem Zug verschwindet der weiße Bauer und man sieht die schwarze Dame!
    • [Edit 4]
    • Angenommen ich geb irgend einen gültigen Befehl in die Inputbox ein: set a2 a4
      Ich drücke aber NICHT auf die Enter-Taste, sondern klicke außerhalb des Schachfensters. Z.B. auf den Browser um etwas nachzulesen.
      Bringe ich dann das Schachfenster wieder nach vorne, dann sehe ich, dass der Zug bereits ausgeführt wurde (<= ERROR)
      Das wollte ich aber nicht, da ich im Browser einen viel besseren Zug gefunden hatte.
      Nämlich set a2 a3 ^^
      (Befehle werden auch mit TAB ausgeführt (<= ERROR) )

      Wünschen würde ich mir, dass meine Befehle NUR mit der Enter-Taste abgeschickt werden können.

    • [Edit 5]
    • Gib mal "set a2 A3" ein. Also das letzte A großgeschrieben.
      => Skript abbruch

      Code
      ==> Array variable subscript badly formatted.:
      [autoit]

      $gFeld[Asc(StringTrimRight($End, 1)) - 97][Int(StringTrimLeft($End, 1)) - 1][0] = "w"

      [/autoit]


      Mit der "- 97" werden nur kleine Buchstaben berücksichtigt!

    • [Edit 6]
    • Nochwas zu _Chess_Who
      [autoit]Return $aChessmanW[$Number][2][/autoit]
      Diese Zeile gibt mir das Handle zum Image (hImage) zurück. (<= ERROR)

      Ich brauch aber:

      [autoit]

      Return $aChessmanW[$Number][0]

      [/autoit]

    6 Mal editiert, zuletzt von Cyberdyne (27. November 2010 um 03:39)

  • Vielen Dank, Cyberdyne,

    deine Fehlerbeschreibungen sind wirklich sehr hilfreich!

    Ich habe versucht, alle Befehle zu verbessern, aber:

    • Mit der Hot-Key Methode bin ich nicht zufrieden, da man nun MsgBoxen nicht mit Enter beenden kann.
    • Den Fehler konnte ich nicht beheben - ich finde den Fehler nicht. Kann jemand nachhelfen?

    Viele Grüße,
    Matthias

    • Den Fehler konnte ich nicht beheben - ich finde den Fehler nicht. Kann jemand nachhelfen?

    In Zeile 303 wird nur geprüft ob die Farbe stimmt, aber nicht ob die Figur auch ein Bauer ist.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hallo chip,

    verdammt, ich habe das falsche Zitat genommen! Ich meinte eigentlich folgenden Fehler:

    Tut mir Leid, das habe ich total verpeilt...

    Gruß,
    Matthias

  • Das Problem ist halt einfach, dass innerhalb des gesamten Scriptens keine gemeinsamer Array genommen wird. Dies hat den Effekt, dass bei der Funktion "__Chess_Wer_Auf_Feld", welches bei einigen anderen Funktionen aufgerufen wird immer weiß raus kommt wenn im weißen array auf dieser position eine Figur eingetragen wird. Es ist dann vollkommen egal ob schwarz auf der selben Position noch eine andere Figur hat.
    Habe ich aber schon in Post 19 gesagt gehabt.

    Hier der Funktionsteil:

    Spoiler anzeigen
    [autoit]

    For $i = 0 To 15
    If $aChessmanW[$i][1] == StringLower($Feld) Then
    $returner[0] = "w"
    $returner[1] = $i
    Return $returner
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $aChessmanB[$i][1] == StringLower($Feld) Then
    $returner[0] = "b"
    $returner[1] = $i
    Return $returner
    EndIf
    Next

    [/autoit]

    Da in den zwei Array sowohl bei weiß der Bauer als auch bei Schwarz die Dame eingetragen ist, wird immer nur der Bauer erscheinen weil die Schleife bei der ersten if verlassen wird. Erst wenn die Figur dann einmal verschoben wurde, wird die Schleife bei der zweiten If verlassen, weil auf dem neuen Feld für weiß kein Eintrag ist.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    • Offizieller Beitrag

    Mit der Hot-Key Methode bin ich nicht zufrieden, da man nun MsgBoxen nicht mit Enter beenden kann.


    Hier würde ich dringend zur Verwendung von Hook raten. Damit läßt sich die Wirkung ganz gezielt auf einzelne Fenster und Controls festlegen. Somit kann man sicher stellen, dass ein Zug ausschließlich mit ENTER ausgeführt wird.
    Habe das Skript nicht detailliert durchgesehen - aber da es Fehler gab bei der Auswertung Kleinbuchstabe/Großbuchstabe ==> einfach immer StringLower verwenden.


  • Mit der Hot-Key Methode bin ich nicht zufrieden, da man nun MsgBoxen nicht mit Enter beenden kann.


    Stimmt, da geb ich dir Recht, gefällt mir dann so auch nicht :P
    Hmm, muss mir das mal durch den Kopf gehen lassen...
    ...ist ja jetzt nicht soooooo wichtig ^^


    Den Fehler konnte ich nicht beheben - ich finde den Fehler nicht. Kann jemand nachhelfen?


    Gerne. 8)

    Der Fehler sitzt in der

    [autoit]

    Func __Chess_Umwandlung($Color, $Feld)

    [/autoit]


    und zwar in dem

    [autoit]

    Case "b"

    [/autoit]


    Zweig
    Dort wurde in der Zeile

    [autoit]

    _DrawChessman($aChessmanW[$who[1]][2], $Feld, True)

    [/autoit]


    B mit W verwechselt
    So müsste die Zeile richtig heißen

    [autoit]

    _DrawChessman($aChessmanB[$who[1]][2], $Feld, True)

    [/autoit]


    dann klappt die Umwandlung perfekt :love:

    • Offizieller Beitrag

    Hi,

    Zitat von MatthiasG.


    @pee: Sorry, ich war mir sicher, dir bereits geantwortet zu haben: Du hattest doch mal eine Engine in Java geschrieben. Ich fände es hierbei sehr interessant, die mal mit AutoIt zu vergleichen: Welche ist "besser". Darüber hinaus ist die Grundlage ja die selbe, ich würde mich freuen, wenn du dein Projekt "übersetzt"...

    Das war nie eine wirklich Engine. Eigentlich ging es im Wesentlichen darum, beliebige Schachvarianten von den Regeln her (gültige Züge, mögliche Züge usw.) zu unterstützen.
    Arbeite mich aber in nächster Zeit in C++ ein und wollte aus diesem Grund als Übung meine Schachsoftware portieren. Mal sehen, ob ich dabei auch eine kleine Engine rauswerfen kann…
    Hängt eben auch davon ab, ob wir ein schönes Interface zum Test hinbekommen ;).

    Johannes

  • Ich konnte mit chip's Fehlermeldung leider nichts anfangen, also hab ich mich hingesetzt und mir mal die drei Arrays ($aChessmanW, $aChessmanB und $gFeld) angeschaut.
    Ich ließ mir deren Inhalt zu Beginn und nach jedem Zug in ein logfile schreiben.

    Hier das Ergebnis, wenn ich das Spiel starte und einen Zug ausführe "set a2 a3"

    Spoiler anzeigen
    • Wie man sieht
      Wechselt der a-Bauer (Nr. 8 ) von a2

      Code
      2010-11-27 23:04:50 : 8:a2


      nach a3

      Code
      2010-11-27 23:08:13 : 8:a3


      soweit alles OK!

    • Wenn man sich den Inhalt von $aChessmanB nach dem Zug anschaut,
      so sieht man das sich da was getan hat, was aber eigentlich nicht sein kann!

      Code
      2010-11-27 23:08:13 : 0:0


      Der schwarze a-Turm wurde auf Feld 0 gesetzt

      Der Grund liegt in der

      [autoit]

      Func __Chess_Set($Start, $End, $Intern, $rochade = -1, $cleanup = True)

      [/autoit]


      Dieser Fehler ist eine kombination aus 2 Fehlern:

      Zunächst geht man zur Zeit davon aus, dass auf dem End-Feld ($End) immer eine gegnerische Figur ist, die somit auf 0 gesetzt werden muß.

      [autoit]

      $aChessmanB[$who2[1]][1] = 0

      [/autoit]


      bzw.

      [autoit]

      $aChessmanW[$who2[1]][1] = 0

      [/autoit]

      Zusätzlich gibt es den Umstand in

      [autoit]

      Func __Chess_Wer_Auf_Feld($Feld)

      [/autoit]


      der diesen Fehler verschleiert hat!

      Nämlich der Rückgabewert, wenn das Feld leer ist.

      [autoit]

      $returner[1] = 0

      [/autoit]


      Der Wert 0 ist jedoch der Wert für einen a-Turm! ;)
      Besser wär hier den Rückgabewert auf 16 zu legen

      Zitat von interface.au3


      16 = niemand
      #ce


      So wärs besser:

      [autoit]

      $returner[1] = 16

      [/autoit]

      Würde man jetzt (nach der Return Korrektur von __Chess_Wer_Auf_Feld() ) das Skript ausführen und einen set Befehl eingeben: "set a2 a3",
      so würde das Skript an der obigen Annahme

      [autoit]

      $aChessmanB[$who2[1]][1] = 0

      [/autoit]


      abbrechen.

      Code
      ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:


      Also muss hier noch vorher geprüft werden, ob es auch wirklich nötig ist $aChessmanB anzupassen.
      D.h. Wenn Figur auf dem Feld ist, dann auf 0 setzen. Sonst nichts tun.
      [Edit 2]
      [Edit 1]

      [autoit]

      If $who2[1] < UBound($aChessmanB) Then $aChessmanB[$who2[1]][1] = 0

      [/autoit]


      [/Edit 1]
      (Text zwischen Autoit-Blöcke gesetzt)
      [/Edit 2]

    • Beim $gFeld (nach dem Zug) ist mir auch was aufgefallen:

      Code
      2010-11-27 23:08:13 : 01:w_8
      [...]
      2010-11-27 23:08:13 : 02:w_8


      Im Array[0][1] (entspricht a2) und
      Array[0][2] (entspricht a3) steht jeweils die selbe Figur => w_8 (Der weiße a-Bauer)

      Der Grund liegt in der

      [autoit]

      Func __Chess_Set($Start, $End, $Intern, $rochade = -1, $cleanup = True)

      [/autoit]

      Die beiden Zeilen

      [autoit]

      $gFeld[Asc(StringLower(StringTrimRight($Start, 1))) - 97][Int(StringLower(StringTrimLeft($End, 1))) - 1][0] = 0
      $gFeld[Asc(StringLower(StringTrimRight($Start, 1))) - 97][Int(StringLower(StringTrimLeft($End, 1))) - 1][1] = 16

      [/autoit]

      müssen durch diese hier ersetzt werden

      [autoit]

      $gFeld[Asc(StringLower(StringTrimRight($Start, 1))) - 97][Int(StringTrimLeft($Start, 1)) - 1][0] = 0
      $gFeld[Asc(StringLower(StringTrimRight($Start, 1))) - 97][Int(StringTrimLeft($Start, 1)) - 1][1] = 16

      [/autoit]


      damit das Feld[$x][$y] gelöscht werden kann.

    • [Edit 3]
      In der
      [autoit]Func __Chess_Set($Start, $End, $Intern, $rochade = -1, $cleanup = True)[/autoit]
      gibts die Befehlzeile
      [autoit]_Chess_HumanTurn($End)[/autoit]
      diese soll laut

      Zitat von interface.au3
      [autoit]

      ; Beschreibung: Wird bei jedem Zug des Menschen ausgeführt.

      [/autoit]

      Aber wenn ich meiner KI einen Zug, mittels

      [autoit]

      _Chess_Set($Start, $End)

      [/autoit]


      , ausführen lasse, dann wird ebenfalls

      [autoit]

      _Chess_HumanTurn($End)

      [/autoit]


      ausgeführt.

      [Edit 5]
      [Edit 4]
      Lösung:

      [autoit]

      If $gWhosTurn == $gPlayerColor Then _Chess_HumanTurn($End)

      [/autoit]


      [/Edit 4]
      (Noch ein Gleichheitszeichen hinzugefügt)
      [/Edit 5]

    deine Fehlerbeschreibungen sind wirklich sehr hilfreich!


    Danke!
    Besonders weil...*vonderseeleschreib*...Die Fehler im Skript zu finden ist noch einfach,
    aber die Fehlerbeschreibungen dazu zu schreiben, find ich richtig anstrengend! 8o

    5 Mal editiert, zuletzt von Cyberdyne (28. November 2010 um 03:06)

  • Hi Leute,

    ich hab mir ein paar Gedanken zu En Passant gemacht und wie man den, über einen einfachen "set xy xy" Befehl ausführen kann.

    Also zunächst muß man, den En Passant Zug über die Validierungs Funktion bestätigen (<= Aufgabenstellung)
    Bevor nun mit "Return True" die Funktion beendet wird, setzt man zuvor noch die Globale Variable $gEnPassant dessen Inhalt das Feld des zu schlagenden Bauern enthält.

    Nachdem der Zug getätigt wurde wird der Inhalt von $gEnPassant automatisch wieder gelöscht.

    [autoit]

    Func _Chess_Validate($Start, $End, $Rochade = -1)
    ; [...]
    $gEnPassant = $Feld ; $Feld müsst ihr ermitteln ;)
    Return True
    EndFunc ;==>_Chess_Validate

    [/autoit]

    Als Beispiel hier mal eine Zugfolge damits klarer wird.

    • weiß zieht mit seinem Bauern: a4->a5
    • schwarz zieht mit seinem Bauern: b7->b5


    Nun gibt weiß "set a5 b6" ein.
    Unsere Validierungs-Funktion bestätigt, das ein En Passant Zug möglich ist. In der Funktion wird die Globale Variable

    [autoit]

    $gEnPassant = "b5"

    [/autoit]

    gesetzt, weil dort sich der schwarze Bauer befindet.
    Mit dieser Information lässt sich nun in der

    [autoit]

    Func __Chess_Set($Start, $End, $Intern, $rochade = -1, $cleanup = True)

    [/autoit]


    das En Passant ausführen. Dazu hab ich __Chess_Set etwas modifiziert.

    Hier nun die modifizierten Skripte zum Thema:[list]
    [*]In die Interface.au3 kommt eine neue Globale Variable $gEnPassant hinzu
    Entweder ist sie leer, dann hat sie den Wert 0,
    oder sie hat den Feldnamen des Bauern der (mit En Passant) geschlagen werden soll. Z.B. b5

    [*]In der __Chess_Set() findet wie immer der normale Spielzug statt, zusätzlich wird hier auch das En Passant behandelt. D.h. Das betroffene Feld wird markiert, von Figuren geleert, Arrays werden aktualisiert, die Markierung wieder entfernt und die Variable $gEnPassant wieder auf Null gesetzt.

    Wär toll, wenn man das so einbauen könnte 8)

  • Moin

    Ich würde schon gerne mitmachen, aber das ist mir ein paar Nummern zu groß.
    Habe zwar eine Vorstellung wie man eine KI basteln kann die auch was drauf hat, aber ich habe schon was anderes relativ komplexes am Laufen und da will ich nicht meine Energie in andere Dinge stecken.

    Viel Spaß noch beim Fehler Suchen und Finden :P
    Ich bleibe am Ball was hier so passiert^^

  • Hallo allerseits!

    Aufgrund persönlicher Angebundenheit hier ein kurzes Statement: Tut mir sehr Leid, dass ihr so lange warten musstet, die neue Version wurde hochgeladen, ich passe gleich Changelog und Datum an (Danke an Magnus :)).

    Ich habe die Fehler so behoben und die Features so eingebaut, wie du, Cyberdyne es vorgeschlagen hast. Leider funktioniert es mit dem Bauern, der sich umwandeln soll, immer noch nicht ganz.

    Über das Wochenende muss ich leider verreisen, heißt, jeder kann in der Datei "rumwuschteln", wie er möchte. Darüber hinaus kann ich den Dropbox-Ordner gerne teilen, sodass sich jeder, der möchte, in Echtzeit an der Entwicklung beteiligen kann. Wer Interesse hat, schreibe mir bitte eine PM oder Email (wobei letzteres vorzuziehen ist, da dort die Reaktionszeit expotenziell steigt ;)).

    @Pee: Die Jury (und vor allem die fleißen "Bug-Reporter") geben sich die allergrößte Mühe, es wird!

    @Marsi: Schade, dass du nicht mitmachen möchtest. Du hast schon beim letzten Wettbewerb großes Können bewiesen. Da hat UEZ wohl einen würdigen Gegner in Sachen GDI+ gefunden ;)

    Ich danke allen beteiligten und auf bald!

    Matthias

  • Leider funktioniert es mit dem Bauern, der sich umwandeln soll, immer noch nicht ganz.


    Der Fehler wurde ja auch noch nicht korrigiert :P

    Hier nochmal das Zitat von oben:

    Leider heute keine Zeit mehr um weiter zu prüfen, aber dass hier ist mir gerade noch aufgefallen:
    Die Zeile

    [autoit]

    If $who2[1] < UBound($aChessmanB) Then $aChessmanW[$who2[1]][1] = 16

    [/autoit]

    sollte eigentlich so aussehen:

    [autoit]

    If $who2[1] < UBound($aChessmanW) Then $aChessmanW[$who2[1]][1] = 16

    [/autoit]

    ...so muß los! :rock:

  • Hast du die neue Datei schon geuppt? Ich erhalte immer nur die alte Version ?(

    Anyway...
    ...hab einen neuen Bug gefunden :P

    Und zwar bezüglich der Rochade...

    in der

    [autoit]

    Func __Chess_Set($Start, $End, $Intern, $rochade = -1, $cleanup = True)

    [/autoit]


    wird der 4. Parameter "$rochade" gar nicht gebraucht :D

    ebenso darf dieser codeteil vollständig entfernt werden

    [autoit]

    If $rochade > -1 And $rochade < 2 Then
    MsgBox(0, 0, "Dieser Aufruf findet nie statt!") ; Hab ich zu Testzwecken hier eingebaut ,-)
    If Not _Chess_Validate($Start, $End, $rochade) Then
    If $Intern Then MsgBox(16, "µitLight Dezember '10 / Januar '11", "Kein gültiger Zug!")
    Return False
    EndIf
    Else

    [/autoit]

    Der Grund ist, es gibt schon die

    [autoit]

    Func __Chess_Rochade($big)

    [/autoit]


    dort wird bereits die Validierungsabfrage und natürlich die Rochade selbst, durchgeführt.


    [DasIstDochKeinBug!?]
    Der eigentliche Bug bestand darin, das in der Funktion "__Chess_Rochade" folgender Befehl ausgeführt wird

    [autoit]

    __Chess_Set("e1", "g1", False, False, False)

    [/autoit]


    Da beim 4. Parameter ein (False) steht, wurde in __Chess_Set die If Abfrage

    [autoit]

    If $rochade > -1 And $rochade < 2 Then

    [/autoit]


    immer als wahr angesehen!
    Normalerweise hätte da statt ein "False" ein "-1" als 4. Parameter hingehört.
    Durch die modifizierung oben, ist das jetzt jedoch hinfällig ;)
    [/DasIstDochKeinBug!?]


    Irgendwie kein Bug aber, ...

    • In manchen MsgBox'en steht "Kein gültiger Zug!" oder "Ungültiger Zug!"
      Ich wär da für eine Vereinheitlichung!
      Was jetzt besser klingt? ...das könnt ihr entscheiden :P
    • Diese beiden Zeilen
      [autoit]If $who2[1] < UBound($aChessmanB) Then $aChessmanB[$who2[1]][1] = 16[/autoit]
      [autoit]If $who2[1] < UBound($aChessmanW) Then $aChessmanW[$who2[1]][1] = 16[/autoit]
      erhalten jeweils den Wert "16".
      Was eigentlich nicht falsch ist, da ja der Feldname (z.B. d7) dadurch gelöscht wird.
      Jedoch fände ich es besser, wenn da eine Int "0" zugewiesen werden würde, um Missverständnisse zu vermeiden und/oder der besseren Code-Lesbarkeit wegen.
      Die "16" stand ja als Wert für das Array $gFeld zur Verfügung, um die Figur "niemand" zu beschreiben, da ja die "0" als Figur bereits vergeben war.
  • Seltsam, jetzt sollte es aber funktionieren.

    Ich habe auch die zusätzlichen Schönheitsfehler korrigiert, aber: Die MsgBoxen sind doch einheitlich?

    Grüße aus dem Pott,
    Matthias

  • Hallo MatthiasG.,

    in der neuen Version muss in die Schach.au3 wie folgt angepasst werden:

    [autoit]

    ElseIf $gWhosTurn = "b" Then
    Switch Int($big)
    Case 0
    __Chess_Set("e8", "g8", False, False)
    __Chess_Set("h8", "f8", False, False)
    Sleep($iSleep)
    _MarkField("e8,g8,h8,f8", False)
    Case 1
    __Chess_Set("e8", "c8", False, False)
    __Chess_Set("a8", "d8", False, False)
    Sleep($iSleep)
    _MarkField("e8,c8,a8,d8", False)
    EndSwitch
    EndIf

    [/autoit]

    bei __Chess_Set war jeweils ein False als Parameter zuviel,

    mfg autoBert