Blame lazarus/scroller/unit1.pas

Ivan Mahonin 24449f
unit Unit1;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
{$mode objfpc}{$H+}
Ivan Mahonin 24449f
Ivan Mahonin 24449f
interface
Ivan Mahonin 24449f
Ivan Mahonin 24449f
uses
Ivan Mahonin 24449f
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
Ivan Mahonin 24449f
  StdCtrls;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
type
Ivan Mahonin 24449f
Ivan Mahonin 24449f
  { TForm1 }
Ivan Mahonin 24449f
Ivan Mahonin 24449f
  TForm1 = class(TForm)
Ivan Mahonin 24449f
    Label1: TLabel;
Ivan Mahonin 24449f
    Label2: TLabel;
Ivan Mahonin 24449f
    Timer1: TTimer;
Ivan Mahonin 24449f
    procedure FormCreate(Sender: TObject);
Ivan Mahonin 24449f
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
Ivan Mahonin 24449f
    procedure Timer1Timer(Sender: TObject);
Ivan Mahonin 24449f
  private
Ivan Mahonin 24449f
    { private declarations }
Ivan Mahonin 24449f
  public
Ivan Mahonin 24449f
    { public declarations }
Ivan Mahonin 24449f
  end;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
const
Ivan Mahonin 24449f
  count = 20;
Ivan Mahonin 24449f
  speed = 10;
Ivan Mahonin 24449f
  br = 10;
Ivan Mahonin 24449f
  pr = 20;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
var
Ivan Mahonin 24449f
  Form1: TForm1;
Ivan Mahonin 24449f
  score: integer;
Ivan Mahonin 24449f
  maxScore: integer;
Ivan Mahonin 24449f
  px, py: integer;
Ivan Mahonin 24449f
  bx, by: array[0..count] of integer;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
implementation
Ivan Mahonin 24449f
Ivan Mahonin 24449f
{$R *.lfm}
Ivan Mahonin 24449f
Ivan Mahonin 24449f
procedure DrawPlayer(clear: boolean);
Ivan Mahonin 24449f
begin
Ivan Mahonin 24449f
  Form1.Canvas.Pen.Style := psClear;
Ivan Mahonin 24449f
  Form1.Canvas.Brush.Color := clBlue;
Ivan Mahonin 24449f
  if clear then Form1.Canvas.Brush.Color := Form1.Color;
Ivan Mahonin 24449f
  Form1.Canvas.Ellipse(px-pr, py-pr, px+pr, py+pr);
Ivan Mahonin 24449f
end;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
procedure DrawBall(clear: boolean; i: integer);
Ivan Mahonin 24449f
begin
Ivan Mahonin 24449f
  Form1.Canvas.Pen.Style := psClear;
Ivan Mahonin 24449f
  Form1.Canvas.Brush.Color := clBlack;
Ivan Mahonin 24449f
  if clear then Form1.Canvas.Brush.Color := Form1.Color;
Ivan Mahonin 24449f
  Form1.Canvas.Ellipse(bx[i]-br, by[i]-br, bx[i]+br, by[i]+br);
Ivan Mahonin 24449f
end;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
{ TForm1 }
Ivan Mahonin 24449f
Ivan Mahonin 24449f
procedure TForm1.FormCreate(Sender: TObject);
Ivan Mahonin 24449f
var
Ivan Mahonin 24449f
  i: integer;
Ivan Mahonin 24449f
begin
Ivan Mahonin 24449f
  score := 0;
Ivan Mahonin 24449f
  px := ClientWidth div 2;
Ivan Mahonin 24449f
  py := ClientHeight div 2;
Ivan Mahonin 24449f
  for i := 0 to count-1 do begin
Ivan Mahonin 24449f
    bx[i] := random(ClientWidth);
Ivan Mahonin 24449f
    by[i] := -random(ClientHeight);
Ivan Mahonin 24449f
  end;
Ivan Mahonin 24449f
  refresh;
Ivan Mahonin 24449f
end;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Ivan Mahonin 24449f
  Y: Integer);
Ivan Mahonin 24449f
begin
Ivan Mahonin 24449f
  DrawPlayer(true);
Ivan Mahonin 24449f
  px := x;
Ivan Mahonin 24449f
  py := y;
Ivan Mahonin 24449f
  DrawPlayer(false);
Ivan Mahonin 24449f
end;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
procedure TForm1.Timer1Timer(Sender: TObject);
Ivan Mahonin 24449f
var
Ivan Mahonin 24449f
  i: integer;
Ivan Mahonin 24449f
begin
Ivan Mahonin 24449f
  for i := 0 to count-1 do begin
Ivan Mahonin 24449f
    DrawBall(true, i);
Ivan Mahonin 24449f
    by[i] := by[i] + speed;
Ivan Mahonin 24449f
    if by[i] > ClientHeight then begin
Ivan Mahonin 24449f
      bx[i] := random(ClientWidth);
Ivan Mahonin 24449f
      by[i] := -br;
Ivan Mahonin 24449f
    end;
Ivan Mahonin 24449f
    DrawBall(false, i);
Ivan Mahonin 24449f
  end;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
  DrawPlayer(false);
Ivan Mahonin 24449f
Ivan Mahonin 24449f
  for i := 0 to count-1 do begin
Ivan Mahonin 24449f
    if sqr(br+pr) > sqr(bx[i]-px) + sqr(by[i]-py) then begin
Ivan Mahonin 24449f
      FormCreate(nil);
Ivan Mahonin 24449f
    end;
Ivan Mahonin 24449f
  end;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
  score := score + 1;
Ivan Mahonin 24449f
  if score > maxScore then maxScore := score;
Ivan Mahonin 24449f
  Label1.Caption := IntToStr(score);
Ivan Mahonin 24449f
  Label2.Caption := IntToStr(maxScore);
Ivan Mahonin 24449f
end;
Ivan Mahonin 24449f
Ivan Mahonin 24449f
end.
Ivan Mahonin 24449f