AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi 4 Gewinnt Gewinnabfrage Erklärung
Thema durchsuchen
Ansicht
Themen-Optionen

4 Gewinnt Gewinnabfrage Erklärung

Offene Frage von "Gausi"
Ein Thema von ChickenHotSauce · begonnen am 11. Jun 2020 · letzter Beitrag vom 14. Jun 2020
 
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
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz