Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

Re: 4-gewinnt Gewinn Überprüfung

  Alt 19. Aug 2009, 12:39
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)
$2B or not $2B
  Mit Zitat antworten Zitat