Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit Vier Gewinnt Gewinnabfrage (https://www.delphipraxis.net/66429-problem-mit-vier-gewinnt-gewinnabfrage.html)

phppeter 29. Mär 2006 15:53


Problem mit Vier Gewinnt Gewinnabfrage
 
Hej Leute,

ich habe Vier Gewinnt programmiert, bin fast fertig, aber habe ein Problem bei der Gewinnfunktion! Waagerechte und senkrechte Reihen werden erkannt, aber keine diagonalen. Für die Diagonalen habe ich extra eine Prozedur geschrieben, schaut euch die bitte mal und schreibt wo der Fehler liegt.
Delphi-Quellcode:
function Tform1.gewonnendiagonal(xwert, ywert, richtung: integer): boolean;
var
  Count, aktufarb, xcase, ycase: integer;
begin

 
  if richtung = 1 then //unten links nach oben rechts
  begin
    Count   := 1;
    xcase   := xwert + 1;
    ycase   := ywert + 1;
    aktufarb := spielfeld[xcase, ycase];
    while (aktufarb = anderreihe) do
    begin
      Inc(Count);
      Inc(xcase);
      Inc(ycase);
      aktufarb := spielfeld[xcase, ycase];
    end;
    xcase := xwert - 1;
    ycase := ywert - 1;
    while (aktufarb = anderreihe) do
    begin
      Inc(Count);
      Dec(xcase);
      Dec(ycase);
      aktufarb := spielfeld[xcase, ycase];
    end;
  end;

 
  if richtung = 2 then //unten rechts nach oben links
  begin
    Count   := 1;
    xcase   := xwert + 1;
    ycase   := ywert - 1;
    aktufarb := spielfeld[xcase, ycase];
    while (aktufarb = anderreihe) do
    begin
      Inc(Count);
      Inc(xcase);
      Dec(ycase);
      aktufarb := spielfeld[xcase, ycase];
    end;
    xcase := xwert - 1;
    ycase := ywert + 1;
    while (aktufarb = anderreihe) do
    begin
      Inc(Count);
      Dec(xcase);
      Inc(ycase);
      aktufarb := spielfeld[xcase, ycase];
    end;
  end;
  if (Count >= 4) then
    Result := True;

 
end;
Ich bedanke mich!!

Übrigens: Wenn das alles totaler Mist ist, bin ich für neue Ansätze für eine solche Gewinnfunktion dankbar ))

Gruß
DelphiDieter!

Flare 29. Mär 2006 16:11

Re: Problem mit Vier Gewinnt Gewinnabfrage
 
Also, ich wüsste jetzt nicht wo man in deiner Funktion einen Rückgabeparameter findet der beinhaltet ob er nun gewonnen hat oder nicht, du überprüfst immer nur das Feld, machst dann aber nix damit. Ich versuche mal deinen Code umzuschreiben.


Flare

//Edit: :oops: habs gerade gefunden dass du doch mitzählst...egal, ich gucks mir trotzdem nochmal genauer an

Ich habe es mal umgeschrieben, es ist ungetestet, da ich keine Lust hatte dazu noch den ganzen Rest zu programmieren
und ich hoffe ich habe es nicht nur vereinfacht oder verschlimmbessert...

Delphi-Quellcode:
function Tform1.gewonnendiagonal(xwert, ywert, richtung: integer): boolean;
var
  Count: integer;
begin
  Result := false;
  Count := 1;
  if richtung = 1 then //unten links nach oben rechts
  begin
    while spielfeld[xwert-1, ywert-1] = anderreihe do //ans letzte Steinchen setzen
    begin
      Dec(xwert);
      Dec(ywert);
    end;
    while spielfeld[xwert, ywert] = anderreihe do //und dann in nur eine Richtung rechnen lassen
    begin
      Inc(Count);
      Inc(xwert);
      Inc(ywert);
    end;
  end;

  if richtung = 2 then //unten links nach oben links
  begin
    while spielfeld[xwert-1, ywert+1] = anderreihe do //ans letzte Steinchen setzen
    begin
      Dec(xwert);
      Inc(ywert);
    end;
    while spielfeld[xwert, ywert] = anderreihe do //und dann in nur eine Richtung rechnen lassen
    begin
      Inc(Count);
      Inc(xwert);
      Dec(ywert);
    end;
  end;
  if (Count >= 4) then Result := True;
end;

phppeter 29. Mär 2006 21:25

Re: Problem mit Vier Gewinnt Gewinnabfrage
 
Recht herzlichen dank! Ich werde es gleich morgen mal einbauen und dann berichten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 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