SO! Jetzt aber. Das Problem war, dass die Schleife
immer bis zum Ende durchlief. Daher fand sie auch NUR Siegbedingungen im letzten Durchgang. Lösung: Ein nicht so schönes, aber wirkungsvoll angebrachtes "exit".
Delphi-Quellcode:
function CheckRows: Boolean;
var
c, r: Integer;
begin
for r := 0 to ROWS-1 do
begin
cnt := 0;
for c := 0 to COLUMNS-1 do
begin
if Field[c, r] <> 1 then cnt := 0
else inc(cnt);
if cnt = 4 then
begin
result := true;
exit;
end; // if cnt=4
end; // for c...
end; // for r...
result := false;
end; // CheckRows
(Getestet!)
Für CheckColumns einfach die beiden Schleifenköpfe gegeneinander austauschen, und für Diagonal reicht mein Hirnschmalz heute auch net mehr
btw: für ein CheckRows waren die Schleifen ohnehin schon falsch herum verschachtelt! Eigentlich war's schon die CheckColumns
.
btw2: das "exit" könnte man jetzt noch umgehen, in dem man das ganze in repeat-until-Schleifen packt, und bei cnt=4 nen Flag setzt. Ist aber
imho in diesem Fall nicht viel leichter lesbar, und zu dem weniger performant.
n8i,
dizzy
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel