//我的一個彩票中獎游戲,希望能幫到你 unit Main;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus, ExtDlgs;type TForm1 = class(TForm) Image1: TImage; MainMenu1: TMainMenu; Again1: TMenuItem; SavePictureDialog1: TSavePictureDialog; Save1: TMenuItem; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Again1Click(Sender: TObject); procedure About1Click(Sender: TObject); procedure Save1Click(Sender: TObject); private procedure ReStart(); { Private declarations } public { Public declarations } end;var Form1: TForm1; CanPaint : boolean = false; Xbmp : array[1..6] of TBitMap ; BigBuffer : TBitMap ; implementation{$R *.DFM} uses unit1;const xs = 163 ; ys = 19 ;procedure TForm1.FormCreate(Sender: TObject); var i : byte; begin BigBuffer := TBitmap.Create; BigBuffer.Width := 251; BigBuffer.Height := 135; for i := 1 to 6 do begin Xbmp[i] := TBitmap.Create; Xbmp[i].Width := 41; Xbmp[i].Height := 30; end; BitBlt(BigBuffer.canvas.handle,0,0,251,135,image1.canvas.handle,0,0,SRCcopy); BitBlt(Xbmp[1].canvas.handle,0,0,41,30,image1.canvas.handle,xs,ys,SRCcopy); BitBlt(Xbmp[2].canvas.handle,0,0,41,30,image1.canvas.handle,xs+41,ys,SRCcopy); BitBlt(Xbmp[3].canvas.handle,0,0,41,30,image1.canvas.handle,xs,ys+30,SRCcopy); BitBlt(Xbmp[4].canvas.handle,0,0,41,30,image1.canvas.handle,xs+41,ys+30,SRCcopy); BitBlt(Xbmp[5].canvas.handle,0,0,41,30,image1.canvas.handle,xs,ys+60,SRCcopy); BitBlt(Xbmp[6].canvas.handle,0,0,41,30,image1.canvas.handle,xs+41,ys+60,SRCcopy); ReStart; end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var i : byte; begin for i := 1 to 6 do Xbmp[i].Free; BigBuffer.Free; end;procedure TForm1.ReStart(); var n ,x,y: byte; xp,yp : word; begin Randomize; for x := 0 to 1 do begin for y := 0 to 2 do begin xp := x * 41+xs; yp := y * 30+ys; n := Random(6)+1; BitBlt(BigBuffer.canvas.handle,xp,yp,41,30,xbmp[n].canvas.handle,0,0,SRCcopy); ; end; end; image1.Canvas.Brush.Color:=clGray; image1.Canvas.Rectangle(xs-2,ys,xs+82,ys+90); // image1.Canvas.RoundRect(xs-2,ys,xs+82,ys+90); image1.Canvas.Rectangle(58,97,150,132);end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin CanPaint := true; end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var i,j : integer ; begin if CanPaint = true then for j := -5 to 5 do for i := -5 to 5 do image1.Canvas.Pixels[x+i,y+j]:= BigBuffer.Canvas.Pixels[x+i,y+j];end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin CanPaint := False; end;procedure TForm1.Again1Click(Sender: TObject); begin Restart; end;procedure TForm1.About1Click(Sender: TObject); begin with TAboutBox.Create(self) do try ShowModal; finally Free; end; end;procedure TForm1.Save1Click(Sender: TObject); var FName : string; begin If SavePictureDialog1.Execute=true then begin FName := SavePictureDialog1.FileName; image1.Picture.Bitmap.SaveToFile(FName); end; end;end.
Var X : Set Of 1 .. 36; Count : Integer; Y : Integer; Begin Count := 0; X := []; Randomize; While Count < 7 Do Begin Y := Random( 30 ) + 1; If Not ( Y In X ) Then Begin Include( X, Y ); Inc( Y ); End; End; End;上面是一个简单的例子,是从1~30中选取7个数字存放在X集合中!!!
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;//以上用于放置七位号码
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
Timer1: TTimer;
Label8: TLabel;
Timer2: TTimer;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
timer1.Enabled:=True;
timer2.Enabled:=True;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
timer1.Enabled:=false;
timer2.Enabled:=false;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Randomize;
Label1.Caption:=IntToStr(Random(10));
Label2.Caption:=IntToStr(Random(10));
Label3.Caption:=IntToStr(Random(10));
Label4.Caption:=IntToStr(Random(10));
Label5.Caption:=IntToStr(Random(10));
Label6.Caption:=IntToStr(Random(10));
//随机产生0-9整数
Label7.Caption:=IntToStr(Random(5));
//随机产生0-4整数,第七位为特别号
Application.ProcessMessages;
//处理Windows消息,属简单多线程
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
close;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Label8.Caption:=FormatDateTime('yyyy"年"m"月"d
"日"dddd',date)+' '+TimeToStr(time);
end;
end.
此程序段中的定时器Timer2只为显示时间秒而定义,按钮 BitBtn1和 BitBtn2可以只用一个(求逆反运算即可),所以该程序段还可优化精简。
unit Main;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Menus, ExtDlgs;type
TForm1 = class(TForm)
Image1: TImage;
MainMenu1: TMainMenu;
Again1: TMenuItem;
SavePictureDialog1: TSavePictureDialog;
Save1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Again1Click(Sender: TObject);
procedure About1Click(Sender: TObject);
procedure Save1Click(Sender: TObject);
private
procedure ReStart();
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
CanPaint : boolean = false;
Xbmp : array[1..6] of TBitMap ;
BigBuffer : TBitMap ;
implementation{$R *.DFM}
uses unit1;const
xs = 163 ;
ys = 19 ;procedure TForm1.FormCreate(Sender: TObject);
var
i : byte;
begin BigBuffer := TBitmap.Create;
BigBuffer.Width := 251;
BigBuffer.Height := 135; for i := 1 to 6 do
begin
Xbmp[i] := TBitmap.Create;
Xbmp[i].Width := 41;
Xbmp[i].Height := 30;
end; BitBlt(BigBuffer.canvas.handle,0,0,251,135,image1.canvas.handle,0,0,SRCcopy); BitBlt(Xbmp[1].canvas.handle,0,0,41,30,image1.canvas.handle,xs,ys,SRCcopy);
BitBlt(Xbmp[2].canvas.handle,0,0,41,30,image1.canvas.handle,xs+41,ys,SRCcopy);
BitBlt(Xbmp[3].canvas.handle,0,0,41,30,image1.canvas.handle,xs,ys+30,SRCcopy);
BitBlt(Xbmp[4].canvas.handle,0,0,41,30,image1.canvas.handle,xs+41,ys+30,SRCcopy);
BitBlt(Xbmp[5].canvas.handle,0,0,41,30,image1.canvas.handle,xs,ys+60,SRCcopy);
BitBlt(Xbmp[6].canvas.handle,0,0,41,30,image1.canvas.handle,xs+41,ys+60,SRCcopy); ReStart;
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i : byte;
begin
for i := 1 to 6 do
Xbmp[i].Free; BigBuffer.Free;
end;procedure TForm1.ReStart();
var
n ,x,y: byte;
xp,yp : word;
begin
Randomize;
for x := 0 to 1 do
begin
for y := 0 to 2 do
begin
xp := x * 41+xs;
yp := y * 30+ys;
n := Random(6)+1;
BitBlt(BigBuffer.canvas.handle,xp,yp,41,30,xbmp[n].canvas.handle,0,0,SRCcopy); ;
end;
end;
image1.Canvas.Brush.Color:=clGray;
image1.Canvas.Rectangle(xs-2,ys,xs+82,ys+90);
// image1.Canvas.RoundRect(xs-2,ys,xs+82,ys+90);
image1.Canvas.Rectangle(58,97,150,132);end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CanPaint := true;
end;procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
i,j : integer ;
begin
if CanPaint = true then
for j := -5 to 5 do
for i := -5 to 5 do
image1.Canvas.Pixels[x+i,y+j]:= BigBuffer.Canvas.Pixels[x+i,y+j];end;procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CanPaint := False;
end;procedure TForm1.Again1Click(Sender: TObject);
begin
Restart;
end;procedure TForm1.About1Click(Sender: TObject);
begin
with TAboutBox.Create(self) do
try
ShowModal;
finally
Free;
end;
end;procedure TForm1.Save1Click(Sender: TObject);
var
FName : string;
begin
If SavePictureDialog1.Execute=true then
begin
FName := SavePictureDialog1.FileName;
image1.Picture.Bitmap.SaveToFile(FName);
end;
end;end.
X : Set Of 1 .. 36;
Count : Integer;
Y : Integer;
Begin
Count := 0;
X := [];
Randomize;
While Count < 7 Do
Begin
Y := Random( 30 ) + 1;
If Not ( Y In X ) Then
Begin
Include( X, Y );
Inc( Y );
End;
End;
End;上面是一个简单的例子,是从1~30中选取7个数字存放在X集合中!!!