Registriert seit: 11. Jun 2020
2 Beiträge
|
4 Gewinnt Gewinnabfrage Erklärung
11. Jun 2020, 23: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 09:13 Uhr)
|
|
Zitat
|