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;