Ja jak bawiłem się z kartami to miałem:
const TaleSize=13*4;
type TCard =0..TaleSize-1
function RandomCard:TCard;
begin
Result:=Random(TaleSize);
end;
function CardNumber(C:TCard):String;
const Numbers:array[0..12]of String=('2','3','4','5','6','7','8','9','10','J','Q','K','A');
begin
Result:=Numbers[(C)shr(2)]; // Można (C)div(4)
end;
function CardSuit(C:TCard):String;
const Suits:array[0..3]of String=('♥','♦','♣','♠');
begin
Result:=Suits[(C)and(3)]; // Można (C)mod(4)
end;
procedure CardDraw(C:TCard;Canvas:TCanvas;Y,X:Position);
var Bmp:TBitmap; // przeważnie w klasie formatki
begin
Bmp:=TBitmap.Create; // Przeważnie w konstruktorze formatki
try
Bmp.LoadFromFile('Tale.bmp'); // Przeważnie w konstruktorze formatki, Obrazek ma wszystkie karty w pionie 4 kolory w kolejności jak w CardSuit w poziomie karty jak w CardNumber
Canvas.CopyRect
(
Bounds(X,Y,CardWidth,CardHeight), // CardWidth,CardHeight - rozmiary bitmapy na obrazku Tale.bmp
Bmp.Canvas,
Bounds(((C)shr(2))*CardWidth,((C)and(3))*CardHeight,CardWidth,CardHeight)
);
finally
Bmp.Free; // przeważnie w destruktorze formatki
end;
end;
//Ewentualnie wrzucenie do TImage
Image1.Picture.Bitmap.Width:=CardWidth;
Image1.Picture.Bitmap.Height:=CardHeight;
CardDraw(RandomCard,Image1.Picture.Bitmap.Canvas,0,0);