Also, ich hab jetzt gerade mal den Pseudocode umgesetzt in meinem Programm. Ob er funktioniert, kann ich noch nicht sagen, da er mir (unverständlicherweise) an einer Stelle sagt, dass " '' ist kein gültiger Integerwert".
Hier mal der Code, mit dem alle Zellen gefüllter werden (sollen):
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;
{.....................................................................}
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 //hier kommt der Fehler!
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
else
begin
ValidDecision.Delete(ValidDecision.IndexOf(dig));
dig:=ValidDecision[random(ValidDecision.Count)];
end;
end
else
ValidDecision.Delete(ValidDecision.IndexOf(dig));
end;
ValidDecision.Free;
Result:=False;
end;
Und dann noch die Überprüfung der Zahl:
Delphi-Quellcode:
function DigitIsOK(i,Digit: integer):boolean;
var
j: Integer;
X,Y: integer;
begin
X:=i mod Size;
Y:=i div Size;
Result:=True;
if not(Digit = 0) then
begin
for j := 0 to Size do
begin
if (Digit = StrToInt(Form1.Map.Cells[X,i])) OR
(Digit = StrToInt(Form1.Map.Cells[i,Y])) then
begin
Result:=False;
Break;
end;
end;
end
else
Result:=false;
end;
Der Fehler kommt so zwischen der 4. und 5. Zelle. Ich kann mir das nicht so richitg erklären, weil hier die Sprache davon ist, dass i='' ist. Aber wieso? Hoffentlich könnt ihr mir nochmal aus der Patsche helfen.
LG, hans ditter