AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Vier Gewinnt Gewinnabfrage

Ein Thema von phppeter · begonnen am 29. Mär 2006 · letzter Beitrag vom 29. Mär 2006
Antwort Antwort
phppeter

Registriert seit: 8. Sep 2005
2 Beiträge
 
#1

Problem mit Vier Gewinnt Gewinnabfrage

  Alt 29. Mär 2006, 15:53
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!
  Mit Zitat antworten Zitat
Flare

Registriert seit: 26. Jan 2006
Ort: Leipzig
529 Beiträge
 
Delphi 7 Professional
 
#2

Re: Problem mit Vier Gewinnt Gewinnabfrage

  Alt 29. Mär 2006, 16:11
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: 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;
Willy Scheibel
  Mit Zitat antworten Zitat
phppeter

Registriert seit: 8. Sep 2005
2 Beiträge
 
#3

Re: Problem mit Vier Gewinnt Gewinnabfrage

  Alt 29. Mär 2006, 21:25
Recht herzlichen dank! Ich werde es gleich morgen mal einbauen und dann berichten.
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz