![]() |
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:
Ich bedanke mich!!
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; Übrigens: Wenn das alles totaler Mist ist, bin ich für neue Ansätze für eine solche Gewinnfunktion dankbar )) Gruß DelphiDieter! |
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; |
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