Type
TSkatKarte = (
skKaro7, skKaro8, skKaro9, skKaro10, skKaroBube, skKaroDame, skKaroKoenig, skKaroAs,
skHerz7, skHerz8, skHerz9, skHerz10, skHerzBube, skHerzDame, skHerzKoenig, skrzAs,
skPik7, skPik8, skPik9, skPik10, skPikBube, skPikDame, skPikKoenig, skPikAs,
skKreuz7, skKreuz8, skKreuz9, skKreuz10, skKreuzBube, skKreuzDame, skKreuzKoenig, skKreuzAs);
TSkatBlatt =
Set of TSkatKarte;
TSkatFarbe = (sfKaro, sfHerz, sfPik, sfKreuz);
TSkatWert = (sw7, sw8, sw9, sw10, swBube, swDame, swKoenig, swAs);
Const sbVollesBlatt = [skKaro7..skKreuzAs];
ssFarbe:
Array[TSkatFarbe]
of String = ('
Karo', '
Herz', '
Pik', '
Kreuz');
ssWert:
Array[TSkatWert]
of String = ('
7', '
8', '
9', '
10', '
Bube', '
Dame', '
Koenig', '
As');
Function Skat_Ziehe(
Var Blatt: TSkatBlatt): TSkatKarte;
Var K: TSkatKarte;
i: Integer;
Begin
If Blatt = []
Then Raise Exception.Create('
keine Karten vorhanden');
i := 0;
For K := skKaro7
to skKreuzAs
do If K
in Blatt
Then Inc(i);
i := Random(i);
Result := TSkatKarte(-1);
Repeat
Inc(Result);
While not (Result
in Blatt)
do Inc(Result);
Dec(i);
Until i < 0;
Exclude(Blatt, Result);
End;
Function Skat_Farbe(Karte: TSkatKarte): TSkatFarbe;
Begin
Result := TSkatFarbe(Ord(Karte)
div 8);
End;
Function Skat_Wert(Karte: TSkatKarte): TSkatWert;
Begin
Result := TSkatWert(Ord(Karte)
mod 8);
End;
Function Skat_String(Karte: TSkatKarte):
String;
Begin
Result := ssFarbe[Skat_Farbe(Karte)] + '
' + ssWert[Skat_Wert(Karte)];
End;
Procedure TForm1.FormCreate(Sender: TObject);
Var i: Integer;
Blatt: TSkatBlatt;
Karte: TSkatKarte;
Begin
Randomize;
Blatt := sbVollesBlatt;
For i := 1
to 4
do Begin
Karte := Skat_Ziehe(Blatt);
Memo1.Lines.Add(Skat_String(Karte));
End;
End;