OK, du hast natürlich Recht.
Ich war gedanklich bei einem Array... und im Set ist die Reihenfolge festgelegt. Damit scheidet das "Mischen" beim Initialisieren aus.
Warum auch immer, das randomrange scheint den oberen Wert nie zu liefern, obwohl dies in den
OH behauptet wird:
Zitat:
RandomRange gibt einen zufälligen Integer-Wert im Bereich von AFrom bis ATo zurück (inklusive).
Also damit klappt es:
KartenWert := randomrange( Low(tKarten), High(TKarten)+1 );
Aber es bleibt immer noch das Problem, wenn der Stapel leer ist und KarteGeben aufgerufen wird. Du kannst ja die Elemente im Set zählen und ggf. anders reagieren:
Delphi-Quellcode:
type
TKarten = 0..KartenAnzahl-1;
TKarte = set of tKarten;
function AnzElemente(ASet: TKarte): Integer;
var
i: TKarten;
begin
Result := 0;
for i := High(TKarten) downto Low(TKarten) do
if i in ASet then Begin
Inc(Result);
end;
end;
[edit]Schreibfehler korrigiert
[/edit]