Hi.
Ich habe folgenden Code um ein 52er Kartenspiel zu mischen.
Das Kartenspiel ist in einem 2-Dimensionalen Array. Die erste Dimension beschreibt die Farbe (Herz, Karo, Kreuz, Pik), die zweite Dimension den Wert (2-10,J,Q,K,A). Nach dem mischen werden die Karten wieder übereinander gelegt.
Der eigentliche Mischvorgang kommt danach, aber ich habe den Fehler auf diesen Abschnitt begrenzen können.
Und zwar auf die repeat-until schleife.
Delphi-Quellcode:
procedure ShuffleCards;
var
i,j,akt: Integer;
wert,farbe:integer;
begin
akt := 1;
for i := 1 to 13 do //13 Werte
for j := 1 to 4 do //4 Farben
begin
repeat
{Mir ist klar das hier nie 13 oder 4 rauskommen wird, die Enumeration mit den Werten/Farben beginnt ja auch wie ein Array bei 0, daher dürfte das so stimmen}
wert := random(13);
farbe := random(4);
until (FKarten[farbe][wert].Chosen = false);
//Karte als genommen markieren
FKarten[farbe][wert].Chosen := true;
//Karte ins Deck legen
FDeck[akt].Wert := TWert(wert);
FDeck[akt].Farbe := TFarbe(farbe);
inc(akt);
end;
end;
In der Konsole funktioniert dieser Code perfekt, in eine
VCL-Anwendung eingebunden friert alles ein...
Wisst ihr wieso???
Thx,
Flips
Philipp F.