ungetestet, aber sollte funktionieren .... denk ich
Delphi-Quellcode:
type TField = (rNone, rWhite, rBlack);
TFieldArray = Array[0..6, 0..5] of TField;
function Check(const a: TFieldArray {; Len: Integer}): TField;
var
x, y, c, r: Integer;
begin
Result := rNone;
for x := Low(a) to High(a) do
for y := Low(a[0]) to High(a[0]) do
if a[x, y] <> rNone then
begin
r := 7;
for c := 1 to 3 do //for c := 1 to Len - 1 do
begin
if (x + c > High(a)) or (a[x + c, y] <> a[x, y]) then
r := r and not 1;
if (y + c > High(a[0])) or (a[x, y + c] <> a[x, y]) then
r := r and not 2;
if (x + c > High(a)) or (y + c > High(a[0]))
or (a[x + c, y + c] <> a[x, y]) then
r := r and not 4;
end;
if r <> 0 then
begin
Result := a[x, y];
exit;
end;
end;
end;
Delphi-Quellcode:
var TheField: TFieldArray;
case Check(TheField {, 4}) of
rWhite: ShowMessage('Weiß hat gewonnen');
rBlack: ShowMessage('Schwarz hat gewonnen');
end;
[add]
passend zu alzaimar's Post, auch noch
Len eingeführt (noch auskommentiert) ... wo man dann die Anzahl der zusammenhängenden Steine angeben könnte
[edit]
kleiner Denkfehler behoben (<= durch > und and durch or ersetzt)