Delphi-PRAXiS
Seite 7 von 7   « Erste     567   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sieger-Prüfung "Vier gewinnt" (https://www.delphipraxis.net/24941-sieger-pruefung-vier-gewinnt.html)

Nightshade 30. Jun 2004 14:32

Re: Sieger-Prüfung "Vier gewinnt"
 
Hab auch noch eine Idee, die das ursprüngliche 2D Array
( 0 = leer, 1 = Spieler 1 , 2 = Spieler 2) nutzt.

Delphi-Quellcode:
var
  daten : array[0..6,0..5] of integer;

function TForm1.Gewonnen:integer;
var tmp1,tmp2 : integer;
begin
  result := 0;

  // Reihen

  for x := 0 to 5 do begin
    tmp1 := 0;
    tmp2 := 0;
    for t := 0 to 6 do begin
      if (daten[t,x] = 1) then tmp1 := tmp1 + trunc(power(2,(t+1)));
      if (daten[t,x] = 2) then tmp2 := tmp2 + trunc(power(2,(t+1)));
    end;
    for t := 0 to 2 do begin
      if ((tmp1 shr t) AND 15) = 15) then result := 1;
      if ((tmp2 shr t) AND 15) = 15) then result := 2;
    end;
  end;

  // spalten

  for t := 0 to 6 do begin
    tmp1 := 0;
    tmp2 := 0;
    for x := 0 to 5 do begin
      if (daten[t,x] = 1) then tmp1 := tmp1 + trunc(power(2,(t+1)));
      if (daten[t,x] = 2) then tmp2 := tmp2 + trunc(power(2,(t+1)));
    end;
    for x := 0 to 2 do begin
      if ((tmp1 shr t) AND 15) = 15) then result := 1;
      if ((tmp2 shr t) AND 15) = 15) then result := 2;
    end;
  end;

  // diagonal SW -> NO

  for u := 3 to 9 do begin
    tmp1 := 0;
    tmp2 := 0;
    for t := 0 to 6 do begin
      x := u - t;
      if ( ( x >= 0 ) AND (x <= 5) ) then begin
        if (daten[t,x] = 1) then tmp1 := tmp1 + trunc(power(2,(t+1)));
        if (daten[t,x] = 2) then tmp2 := tmp2 + trunc(power(2,(t+1)));
      end;
    end;
    for x := 0 to 2 do begin
      if ((tmp1 shr t) AND 15) = 15) then result := 1;
      if ((tmp2 shr t) AND 15) = 15) then result := 2;
    end;
  end;


  // diagonal SO -> NW

  for u := 3 to 9 do begin
    tmp1 := 0;
    tmp2 := 0;
    for t := 0 to 6 do begin
      x := u - (6 - t);
      if ( ( x >= 0 ) AND (x <= 5) ) then begin
        if (daten[t,x] = 1) then tmp1 := tmp1 + trunc(power(2,(t+1)));
        if (daten[t,x] = 2) then tmp2 := tmp2 + trunc(power(2,(t+1)));
      end;
    end;
    for x := 0 to 2 do begin
      if ((tmp1 shr t) AND 15) = 15) then result := 1;
      if ((tmp2 shr t) AND 15) = 15) then result := 2;
    end;
  end;
end;
Rückgabe Wert ist dann 0=keiner, 1=Spieler1, 2=Spieler2


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr.
Seite 7 von 7   « Erste     567   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz