使用Form的Canvas将jp图片绘制出来,点击洗牌按钮随机排列
效果图
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,jpeg,
Dialogs, ExtCtrls, StdCtrls, Generics.Collections;
type
TForm4 = class(TForm)
shuffle: TButton;
reset: TButton;
procedure Formpaint(Sender :TObject);
procedure FormResize(Sender: TObject);
procedure shuffleClick(Sender: TObject);
procedure resetClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
FCards:array [0..53] of integer;//定义排列数组
FoldWidth:Integer;//定义筛选条件
FJpgList: TList<TJpegImage>;//提前加载图片,不然太卡了
public
{ Public declarations }
destructor destroy;override;
end;
procedure ShuffleArray(var A: array of Integer);//洗牌
var
Form4: TForm4;
implementation
procedure ShuffleArray(var A: array of Integer);
var
i, j, temp: Integer;
begin
Randomize;
for i := High(A) downto Low(A) do
begin
j := Random(i + 1);//随机数,将当前牌随机交换位置
temp := A[i];
A[i] := A[j];
A[j] := temp;
end;
end;
{$R *.dfm}
destructor TForm4.destroy;
var
vjpg : TJpegImage;
begin
for vjpg in FJpgList do//释放图片
vjpg.Free;
FJpgList.Free;
inherited;
end;
procedure TForm4.FormResize(Sender: TObject);
begin
if FoldWidth <> width then//只有宽改变才重绘,剪枝
begin
FoldWidth := width;
Repaint;
end;
end;
procedure TForm4.FormCreate(Sender: TObject);
var
i:Integer;
vjpg:TjpegImage;
begin
FJpgList := TList<TJpegImage>.Create;
for I := 0 to 53 do
begin
FCards[i] := i;
vjpg := TJpegImage.Create;
vjpg.LoadFromFile('./Cards/'+inttostr(FCards[i])+'.jpg'); //将图片加载至内存提升响应速度
FJpgList.Add(vjpg);
end;
end;
procedure TForm4.Formpaint(Sender :TObject);
var
Vleft,Vtop,i:Integer;
begin
vLeft :=0;
vTop := 0;
for i := 0 to 53 do
begin
Canvas.Draw(Vleft,vtop,FJpgList[fCards[i]]);//绘制内存数据
if VLeft + 150 > Width then //换行
begin
Vleft := 0;
VTop := VTop +180;
end
else
vleft := vLeft+20;//前移
end;
end;
procedure TForm4.resetClick(Sender: TObject);//重置顺序
var I:Integer;
begin
for I := 0 to 53 do
fCards[i] := i;
RePaint;
end;
procedure TForm4.shuffleClick(Sender: TObject);//洗牌
begin
shuffleArray(fCards);
Repaint;
end;
end.