Einzelnen Beitrag anzeigen

Bloodfire

Registriert seit: 17. Jun 2004
38 Beiträge
 
#1

Compiler will mich vera*** ??

  Alt 30. Okt 2005, 10:43
Hi!

Seht euch bitte mal folgenden Code an:

Delphi-Quellcode:
function TBoardForm.KingInDanger(FField: RField): Boolean;
var
  (...)
  KingPos: TPoint;
  CurPos: TPoint;
  i,j: Integer;
begin
   result:=False;

   for i:=1 to 8 do
     for j:=1 to 8 do
       begin
          KingPos.X:=j;
          KingPos.Y:=i;
          if (FField[KingPos.X,KingPos.Y].Name='K') and
             (FField[KingPos.X,KingPos.Y].White=UserWhite) //das hier erkennt er nicht!?
            then break;
       end;
   (...)
end;
Das Feld FField('K',True) liegt auf 5/1, und eigentlich sollte er da auch abbrechen -> break. Aber jetzt kommt das beste: Er geht nichtmal in die THEN-Zeile!!!

Drei Screens liegen bei (aus dem UnitCode (mit Breakpoints))
die drei Screens sind aufeinanderfolgend, also da ist kein Schritt dazwischen (Stop-F8-F8)! Man beachte die überprüften Werte der Variablen!

Kann mir irgendjemand sagen, was daran falsch ist!?

der Code lautet danach wie folgt weiter:

Delphi-Quellcode:
for i:=1 to 8 do
     for j:=1 to 8 do
       begin
          CurPos.X:=j;
          CurPos.Y:=i;
          OppFig:=FField[CurPos.X,CurPos.Y];
          if (OppFig.Name>'') and not(OppFig.White = UserWhite) then
            begin
               if (FigureCanMove(OppFig.Name,CurPos,KingPos)) then
                 begin
                    result:=True;
                    exit;
                 end;
            end;
       end;
Und so seltsam es ist, hier funktionierst, wenn OppFig.White <> UserWhite ist!??

Ich habe auch schon versucht statt [KingPos.X,KingPos.Y] [j,i] zu schreiben, bzw. so, wie im Nachfolgenden Code das Feld temporär zu speichern mit KingFig:=FField[KingPos.X,KingPos.Y], bzw. KingFig:=FField[j,i] - alles vergebllich.

Es liegt auch nicht am Namen, denn mit dem folgenden Code komme ich in die erste THEN-Behandlung, aber bei dem White=UserWhite Vergleich will er wieder nicht!?

Delphi-Quellcode:
if (FField[KingPos.X,KingPos.Y].Name='K') then //hier kommt er rein
  if (FField[KingPos.X,KingPos.Y].White=UserWhite) //hier spinnt er = er denkt (...).White wäre <> UserWhite
    then break;
Miniaturansicht angehängter Grafiken
break_ffield.jpg_163.jpg   break_step3.jpg_339.jpg   break_step2.jpg_890.jpg   break_step1jpg_792.jpg  
  Mit Zitat antworten Zitat