Manchmal hilft es scheinbar, wenn man den ganzen Kram 3 Wochen liegen läßt und dann nochmal draufguckt. Hab den Fehler mMn gefunden: 3. Zeile von unten.
Zudem hab ich mal die Bestimmung von X,Y aus der Schleife rausgenommen. Das muss ja nicht jedes mal neu berechnet werden, da es sich ja nicht ändert.
Delphi-Quellcode:
function SetCell(i: integer) : boolean;
var ValidDecision: TStringList;
j,X,Y: Integer;
dig: string;
begin
if i > (Size * Size - 1) then
begin
Result:=true;
Exit;
end;
X:=i mod Size; //hierhin verschoben
Y:=i div Size;
{.....................................................................}
ValidDecision:=TStringList.Create;
for j := 1 to Size do
ValidDecision.Add(IntToStr(j));
{.....................................................................}
while ValidDecision.Count > 0 do
begin
dig:=ValidDecision[random(ValidDecision.Count)];
if DigitIsOk(i,StrToInt(dig)) then
begin
// X:=i mod Size;
// Y:=i div Size;
Form1.Map.Cells[X,Y]:=dig;
if SetCell(i + 1) then
begin
Result:=True;
Exit;
end;
end
else
ValidDecision.Delete(ValidDecision.IndexOf(dig));
end;
ValidDecision.Free;
Form1.Map.Cells[0,0]:=dig;//Das ist der Fehler!!! Es muss nicht die 0/0 Zelle gestzt werden,
//sondern die X/Y Zelle muss auf 0 gesetzt werden:
Form1.Map.Cells[X,Y]:='0';
Result:=False;
end;
Das müsste es doch gewesen sein, oder?