procedure TForm1.myarray(sender: TObject); type card:record number:integer; picture:integer; end; var i,t:integer; a:array[0..59] of card; b:array[0..53] of card; begin for i:0 to 53 do begin a[i].number:=(i mod 13)+1; a[1].picture:=(i div 13)+1; end; i:=0; repeat t:=random(53); if not (a[t].number=0) then begin i:=i+1; b[i-1]:=a[t]; a[t].number:=0; end; until i=60; for i:=0 to 53 do begin paintmycard(b[i]) end; end;
for j := 0 to 79 do begin // 随机取出一张牌 Index := Random(80); // 开始交换数据 tmp := Card[j]; // 把当前的牌临时存放,以便交换 // 当前(j)的牌与随机取出的牌(Index)不一样的时候 // 用随机取出的牌与当前的(j)的牌交换 if Card[j] <> Card[Index] then begin Card[j] := Card[Index]; Card[Index] := tmp; end; end; end.此算法可以将原来的数组打乱,就是洗牌。
procedure TForm1.Button1Click(Sender: TObject); var i,n,x:byte; Num,tmp:array[1..54]of byte; begin for i:=low(tmp) to high(tmp) do tmp[i]:=i; Randomize; i:=54; n:=0; Memo1.Text :=''; while i>1 do begin x:= Random(i); if tmp[x]>0 then begin inc(n); Num[n]:=tmp[x]; tmp[x]:=tmp[i];//把最后一位放到当前位置 tmp[i]:=0; dec(i); Memo1.Lines.Add(format('%d %d',[n,Num[n]])); if i=1 then begin inc(n); Num[n]:=tmp[i]; Memo1.Lines.Add(format('%d %d',[n,Num[n]])); end; end; end; Memo1.Lines.Add('搞定'); end;
type
card:record
number:integer;
picture:integer;
end;
var i,t:integer;
a:array[0..59] of card;
b:array[0..53] of card;
begin
for i:0 to 53 do
begin
a[i].number:=(i mod 13)+1;
a[1].picture:=(i div 13)+1;
end;
i:=0;
repeat
t:=random(53);
if not (a[t].number=0) then
begin
i:=i+1;
b[i-1]:=a[t];
a[t].number:=0;
end;
until i=60;
for i:=0 to 53 do
begin
paintmycard(b[i])
end;
end;
在54个数中取随即数
如取5则a[5]和最后一个数a[f]交换
即
a[0]=0 a[1]=1 .....a[5]=53....a[53]=5 f=52
再在53个数中取随即数(由f控制范围)
.
.
直到f=1
a[0]...a[53]就是随即序列
一共53次自己想的,不知对不对
var
j, tmp, Index: Integer;
for j := 0 to 79 do
begin
// 随机取出一张牌
Index := Random(80);
// 开始交换数据
tmp := Card[j]; // 把当前的牌临时存放,以便交换
// 当前(j)的牌与随机取出的牌(Index)不一样的时候
// 用随机取出的牌与当前的(j)的牌交换
if Card[j] <> Card[Index] then
begin
Card[j] := Card[Index];
Card[Index] := tmp;
end;
end;
end.此算法可以将原来的数组打乱,就是洗牌。
var
i,n,x:byte;
Num,tmp:array[1..54]of byte;
begin
for i:=low(tmp) to high(tmp) do
tmp[i]:=i;
Randomize;
i:=54;
n:=0;
Memo1.Text :='';
while i>1 do
begin
x:= Random(i);
if tmp[x]>0 then
begin
inc(n);
Num[n]:=tmp[x];
tmp[x]:=tmp[i];//把最后一位放到当前位置
tmp[i]:=0;
dec(i);
Memo1.Lines.Add(format('%d %d',[n,Num[n]]));
if i=1 then
begin
inc(n);
Num[n]:=tmp[i];
Memo1.Lines.Add(format('%d %d',[n,Num[n]]));
end;
end;
end;
Memo1.Lines.Add('搞定');
end;