Thema: Schachproblem

Einzelnen Beitrag anzeigen

Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#3
  Alt 24. Feb 2003, 18:38
Um die Diskussion zu beginnen...
Was ich ändern würde:
  • Freiheit für Kylix-Benutzer !
    Delphi-Quellcode:
    {$IFDEF LINUX}
    uses
      SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
      QDialogs, QStdCtrls, QExtCtrls;
    {$ELSEIF WIN32}
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    {$IFEND}

    // ...

    {$IFDEF LINUX}
    {$R *.xfm}
    {$ELSEIF WIN32}
    {$R *.dfm}
    {$IFEND}
  • Die if-Anweisungen bei der Feld-Überprüfung kannst du dir sparen:
    Delphi-Quellcode:
    b := false;
    for i := 0 to 7 do {Feld-Test}
      b := (b or Schachbrett[ReiheAktuell, i] or Schachbrett[i, SpalteAktuell]) or {senkrecht, waagrecht}
           (((SpalteAktuell + abs(ReiheAktuell - i)) in [0..7]) and
           (b or Schachbrett[i, SpalteAktuell + abs(ReiheAktuell - i)])) or {diagonal oben}
           (((SpalteAktuell - abs(ReiheAktuell - i)) in [0..7]) and
           (b or Schachbrett[i, SpalteAktuell - abs(ReiheAktuell - i)])); {diagonal unten}
  • Für mein Gefüh schöner gewesen wäre eine rekursive Lösung, aber dann dürftest du deinen Code sowieso komplett umpkrempeln und diese iterative Lösung ist wahrscheinilich auch schneller, weil nicht ständig Variablen auf den Stack gedrückt oder wieder heruntergeholt werden müssen.
Soviel für meinen Teil...

d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat