Einzelnen Beitrag anzeigen

ChickenHotSauce

Registriert seit: 11. Jun 2020
2 Beiträge
 
#1

4 Gewinnt Gewinnabfrage Erklärung

  Alt 11. Jun 2020, 22:29
Hallo Zusammen,
ich sitze momentan an einem Tutorial zu 4 Gewinnt von Delphi-Treff.de. Ich arbeite das ganze durch und bin bis jetzt noch nirgends hängen geblieben, aber die function zur Gewinnabfrage kam und kommt einfach nicht in meinen Kopf rein. Könnte mir das jemand bitte erklären?
Hier der Code:
Delphi-Quellcode:
function TForm1.GewinnerFeststellen(x: Integer; y: Integer; spieler: TFeldBesetzung): Boolean;
var
   richtung: array[0..7,0..1] of Integer;
   a,b,i,j,k: Integer;
begin
   //Überprüfung, ob der Spieler gewonnen hat
   Result := false;
   a := 0;
   i := x-1;
   j := y-1;
   if i < 0 then Inc(i);
   if j < 0 then Inc(j);

   //Überprüfung ob der Spieler auf den umliegenden Feldern schon gesetzt hat
   while (j <= y+1) and (j <= FSpielfeldHoehe-1) do
   begin
      if (FSpielfeld[i,j] = spieler) and not((i=x) and (j=y)) then
      begin
         richtung[a,0] := i-x;
         richtung[a,1] := j-y;
         Inc(a);
      end;
      Inc(i);

      if (i > x+1) or (i > FSpielfeldBreite-1) then
      begin
         i := x-1;
         if i < 0 then Inc(i);
         Inc(j);
      end;
   end;

   //Weiterverfolgung in den jeweiligen Richtungen, ob mindestens 4 Steine in einer
   //Reihe sind

   for k := 0 to a - 1 do
   begin
      i := x; j := y; b := 0;
      while (i >= 0) and (j >= 0) and (i <= FSpielfeldBreite-1) and (j <= FSpielfeldHoehe-1)
            and (FSpielfeld[i,j] = spieler) do
      begin
         Inc(b);
         i := i+richtung[k,0];
         j := j+richtung[k,1];
      end;
      i := x-richtung[k,0]; j := y-richtung[k,1];
      while (i >= 0) and (j >= 0) and (i < FSpielfeldBreite-1) and (j < FSpielfeldHoehe-1)
            and (FSpielfeld[i,j] = spieler) do
      begin
         Inc(b);
         i := i-richtung[k,0];
         j := j-richtung[k,1];
      end;
      if b > 3 then Result := true;
   end;
end;

Danke schon mal im Voraus!

Geändert von ChickenHotSauce (12. Jun 2020 um 08:13 Uhr)
  Mit Zitat antworten Zitat