![]() |
showmessage beeinflusst integer-wert eines arrays? niemals..
:hi:
Also ich glaube, ich habe noch nie so auf dem Schlauch gestanden, wie jetzt :!: Ich bastel zur Zeit nebenbei an einem Pokerspielchen herum. Da kommt wieder ein Problem, aber dazu später mehr. Meine 1. Frage: Delphi (Turbo Delphi) bearbeitet doch Funktion nach Funktion durch oder? Wenn das nicht so ist (Das wäre eine Überraschung für mich), kann das eine Fehlerquelle sein, ansonsten fällt mir Nichts mehr ein... Ich habe einen Typ TKarte, mit verschiedenen Variablen, in die ich per Zufallsgenerator die Werte hineinlade. Das funktioniert einwandfrei. Nach einem Päärchen und einem Flush zu schauen, funktioniert auch schon zuverlässig. Jetzt bin ich bei der Erkennung eines Drillings. Ich habe eine Funktion in der ich auf einen Drilling prüfe. Wenn das der Fall ist, wird ein true ausgegeben (bool'sche Funkion). Ansonsten bleibt das Ergebnis false. Innerhalb der Funktion hatte ich zu Testzwecken ein Showmessage-Befehl, der mir Zwischenwerte anzeigt. Das funktionierte dann einwandfrei, also die Erkennung eines Drillings. Kaum nehme ich lediglich den Showmessage-Befehl heraus, bekomme ich plötzlich bei der Funktion immer ein true zurück... Das ist komisch, sehr komisch. zum nachvollziehen, die relevanten Stellen des Codes:
Delphi-Quellcode:
type
TKartenWert = 1..13; // 1 = AS, 11 = Bube, 12 = Dame, 13 = König TKartenFarbe = (kfKaro, kfHerz, kfPik, kfKreuz); TKartenPosition = 1..5; TKarte = class(TObject) private FWert: TKartenWert; FFarbe: TKartenFarbe; FPosition: TKartenPosition; FUsedCount: Integer; FUsedBool: Boolean; FUsedPosition: Boolean; public constructor Create(Wert : TKartenWert;Farbe : TKartenFarbe;Position : TKartenPosition); property Wert: TKartenWert read FWert write FWert; property Farbe: TKartenFarbe read FFarbe write FFarbe; property Position: TKartenPosition read FPosition write FPosition; property UsedCount: Integer read FUsedCount write FUsedCount; property UsedBool: Boolean read FUsedBool write FUsedBool; property UsedPosition: Boolean read FUsedPosition write FUsedPosition; end; var Form1: TForm1; ABlatt: Array[1..5] of TKarte; AsBlatt: Array[1..5] of TKarte; PairOneCard,PairTwoCard,UsedCountSumme: Integer; PairOneCard2,PairTwoCard2,UsedWertSumme,RFarbe: Integer; ThreeCard1,ThreeCard2,ThreeCard3: Integer;
Delphi-Quellcode:
constructor TKarte.create(Wert : TKartenWert;Farbe : TKartenFarbe;Position : TKartenPosition);
begin inherited create; FWert := Wert; FPosition := Position; FFarbe := Farbe; end; Hier die Funktion zum Testen des Drillings (hier das showmessage auskommentiert):
Delphi-Quellcode:
function isThreeOfAKind():boolean;
var a,b :integer; begin ThreeCard1:=0; ThreeCard2:=0; ThreeCard3:=0; UsedCountSumme:=0; for a:= 1 to 5 do begin ABlatt[a].UsedCount:=0; ABlatt[a].UsedBool:=false; ABlatt[a].UsedPosition:=false; end; for a := 1 to 5 do begin for b := 1 to 5 do begin if ((ABlatt[a].Wert = ABlatt[b].Wert)and(ABlatt[a].Position <> ABlatt[b].Position)) then begin ABlatt[a].UsedCount:=(ABlatt[a].UsedCount+1); ABlatt[b].UsedCount:=(ABlatt[b].UsedCount+1); end end; end; for a:=1 to 5 do begin if (ABlatt[a].UsedCount)=4 then begin ABlatt[a].UsedBool:=true; end end; for a:=1 to 5 do begin if (ABlatt[a].UsedBool=true) then begin ThreeCard1:=a; ABlatt[a].UsedBool:=false; break; end; end; for a:=1 to 5 do begin if (ABlatt[a].UsedBool=true) then begin ThreeCard2:=a; ABlatt[a].UsedBool:=false; break; end; end; for a:=1 to 5 do begin if (ABlatt[a].UsedBool=true) then begin ThreeCard3:=a; ABlatt[a].UsedBool:=false; break; end; end; {showmessage(inttostr(ABlatt[1].UsedCount)+' '+ inttostr(ABlatt[2].UsedCount)+' '+ inttostr(ABlatt[3].UsedCount)+' '+ inttostr(ABlatt[4].UsedCount)+' '+ inttostr(ABlatt[5].UsedCount)); } if ((ThreeCard1>0)and(ThreeCard2>0)and(ThreeCard3>0)) then begin for a:=1 to 5 do begin UsedCountSumme:=UsedCountSumme+ABlatt[a].UsedCount; end; if UsedCountSumme=12 then begin result:=true; end else begin result:=false; end; end; end; Die Funktion rufe ich so auf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin randomize; drawKarten(); // die Karten werden per random zugeordnet. Doppelte etc. alles berücksichtigt, hier // kann der Fehler nicht sein. if isOnePair()=true then begin showmessage('Ein Paar!'); end; if isFlush()=true then begin showmessage('Ein Flush!'); end; if isThreeOfAKind()=true then begin showmessage('Ein Drilling!'); end; end; Nehme ich also das Showmessage in der isThreeOfAKind()-function heraus, bekomme ich die Meldung "Ein Drilling!" immer, egal ob ein Drilling offen liegt oder nicht. Lasse ich das showmessage auskommentiert, bekomme ich nur "Ein Drilling!", wenn wirklich einer da liegt. So kurios... ich steh' total auf dem Schlauch... bin dankbar für jeden Tipp :gruebel: :? ps: die Werte werden auch von anderen Funktionen genutzt, aber wie am Anfang der Funktion zu sehen, setze ich alle Werte auf 0 zurück um zu prüfen, was auf dem Tisch liegt. |
Re: showmessage beeinflusst integer-wert eines arrays? niema
Bau doch den Code mal ein bisschen um...
Delphi-Quellcode:
Das ist kurz und knackig und müsste funktionieren... ;)
if isOnePair then
showmessage('Ein Paar!') else if isFlush then showmessage('Ein Flush!') else if isThreeOfAKind then showmessage('Ein Drilling!'); Chris PS: Das "=true" ist unnötig, da der if-Abfrage schon den True-Wert der Funktionen reicht... |
Re: showmessage beeinflusst integer-wert eines arrays? niema
:hi:
Danke für die Antwort :) Das könnte ich machen, aber das kann doch nicht das Problem sein oder? Es wird ja nur eine Meldung ausgegeben, wenn die Funktion true zurückgibt - ansonsten nicht. Von daher doch nur eine kosmetische Sache oder? zu deinem ps: Ja das werde ich machen. Das ist noch ein Überbleibsel von diversen Tests, das Problem zu beheben ;) |
Re: showmessage beeinflusst integer-wert eines arrays? niema
Hallo zecke,
das Funktionsergebnis ist nur definiert, wenn alle ThreeCardX-Variablen mit einem Wert größer Null besetzt wurden. Gruß Hawkeye |
Re: showmessage beeinflusst integer-wert eines arrays? niema
Zitat:
Komisch ist nur, dass diese Variante bei einem Paar funktioniert und das selbe Prinzip beim Drilling versagt. Genauso ist mir der Zusammenhang zum Showmessage vollkommen unklar :? |
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