unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus; type Tair = class(TForm) movetimer: TTimer; hits: TLabel; targets: TLabel; MainMenu1: TMainMenu; new1: TMenuItem; pull1: TMenuItem; procedure FormCreate(Sender: TObject); procedure pullClick(Sender: TObject); procedure vanilla(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure movetimerTimer(Sender: TObject); procedure newClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var air: Tair; implementation {$R *.dfm} var skeet : TShape; numhits : integer; numtargets : integer; procedure Tair.FormCreate(Sender: TObject); begin randomize ; numhits := 0; numtargets := 0; hits.caption := 'hits = 0'; targets.caption := 'targets = 0'; end; procedure Tair.pullClick(Sender: TObject); var loopything : byte; begin {release targets} hits.caption := 'hits = '+inttostr(numhits); for loopything := 1 to 5 do begin {make a brand new skeet} skeet:=TShape.Create(self); skeet.parent := air; skeet.Visible := true; skeet.Width := 20; skeet.Height := 10; skeet.Brush.color := rgb(random(255),random(255),random(255)); skeet.Left := random(clientwidth div 2); skeet.Top := random(clientheight-10)+1; skeet.onmousedown := vanilla end; {indicate there are 5 more targets} numtargets := numtargets + 5; targets.Caption := 'targets = '+inttostr(numtargets) end; procedure Tair.vanilla(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin {record hit} inc(numhits); {reduce target tally} dec(numtargets); hits.caption := 'hits = '+inttostr(numhits); targets.Caption := 'targets = '+inttostr(numtargets); {remove the skeet} (sender as TShape).destroy; {mess with the users eyes} air.Color := rgb(random(255),random(255),random(255)); end; procedure Tair.movetimerTimer(Sender: TObject); var loop : integer; tester : TShape; begin for loop:= (componentcount-1) downto 1 do if (components[loop] is TShape) then begin {move the skeet} tester := components[loop] as TShape; tester.Left := tester.left + 5; {check to see if the skeet goes out of range} if tester.Left > clientwidth then begin {remove the skeet} tester.destroy; {ajust the number of live targets} dec(numtargets); targets.Caption := 'targets = '+inttostr(numtargets) end; end end; procedure Tair.newClick(Sender: TObject); begin numhits := 0; numtargets := 0; hits.Caption := 'hits = 0'; targets.Caption := 'targets = 0'; end; end.