我做的一个数字滚动器用来幸运抽奖,请问如果让出现过的数字不再出现,应该怎样改代码,请大家帮忙看看,谢谢!
用在联欢会的幸运抽奖,每个人手上都有一个号码,从1-200,FORM1上有个button,有人喊停的时候就按一下BUTTON,就在FORM上停留一个数字,我要求数字不要重复出现,避免一个人得两次奖。急呀,明天就开了,我就这10分,谢谢!procedure TForm1.Timer1Timer(Sender: TObject);
begin
Randomize;
Label1.Caption:=IntToStr(Random(200));
end;
procedure TForm1.BtnBEClick(Sender: TObject);
begin
Timer1.Enabled := not Timer1.Enabled;
if Timer1.Enabled then
BtnBE.caption := 停止'
else
BtnBE.caption := '开始';
end;
用在联欢会的幸运抽奖,每个人手上都有一个号码,从1-200,FORM1上有个button,有人喊停的时候就按一下BUTTON,就在FORM上停留一个数字,我要求数字不要重复出现,避免一个人得两次奖。急呀,明天就开了,我就这10分,谢谢!procedure TForm1.Timer1Timer(Sender: TObject);
begin
Randomize;
Label1.Caption:=IntToStr(Random(200));
end;
procedure TForm1.BtnBEClick(Sender: TObject);
begin
Timer1.Enabled := not Timer1.Enabled;
if Timer1.Enabled then
BtnBE.caption := 停止'
else
BtnBE.caption := '开始';
end;
设计思想可以这样,就是在界面上弄个按钮再额外加个LISTBOX用于保存已经抽取出的号码,这样每次抽取出的号码先跟LISTBOX中的项比较,不存在于LISTBOX就OK并加入至LISTBOX,已经存在的就继续抽取...
var aa : array[1..36] of string[2]; //aa数组为需要随机排列的数组,
{先把1..36按顺序给aa数组赋值}
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
for i:=1 to 36 do begin
aa[i]:=inttostr(i);
bb[i]:=inttostr(i);
end;
end;
{随机进行排列}
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer; swapa:string[2];
begin
randomize;
for i:=1 to 36 do begin
j:=1+random(36);
swapa:=aa[i];
aa[i]:=aa[j];
aa[j]:=swapa;
end;
end; //由此得到不重复的随机排列数字
sRdm: string = '';
sGeted: string = ',';procedure TForm1.Timer1Timer(Sender: TObject);
begin
Randomize();
sRdm := IntToStr(Random(200) + 1);
if Pos(',' + sRdm + ',', sGeted) = 0 then
Label1.Caption := sRdm;
end;procedure TForm1.BtnBEClick(Sender: TObject);
begin
Timer1.Enabled := not Timer1.Enabled;
if Timer1.Enabled then
begin
BtnBE.caption := '停止';
sGeted := sGeted + sRdm + ',';
end
else BtnBE.caption := '开始';
end;end.
==
效率不高,试一下如何
开一个tf: array[1..1000000] of boolean的数组
如果先内存太大,可以考虑用楼上的
radomsize;
t:=random(1000000);;
if tf[t]=false then
begin
//你要的代码
end;
const
NUM_COUNT = 10;var
a: array[0..NUM_COUNT] of Integer;初始化
var
i: Integer;
begin
a[0] := NUM_COUNT;
for i:=1 to NUM_COUNT do
a[i] := i;
end;得到不重复随机数,全部取完返回-1
function GetRandom: Integer;
var
res, tmp: Integer;
begin
if a[0] = 0 then
begin
Result := -1;
Exit;
end;
Randomize;
tmp := Random(a[0])+1;
Result := a[tmp];
a[tmp] := a[a[0]];
a[a[0]] := Result;
a[0] := a[0] - 1;
end;测试
procedure TForm1.Button1Click(Sender: TObject);
var
Ran: Integer;
begin
Ran := GetRandom;
if Ran <> -1 then
Memo1.Lines.Add(IntToStr(Ran))
else
Memo1.Lines.Add('随机数已经全部取完!');
end;