delphi软件开发洗牌案例

使用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.

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值