Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ExtCtrls, StdCtrls;
- type
- TForm1 = class(TForm)
- Panel1: TPanel;
- Timer1: TTimer;
- Shape1: TShape;
- GroupBox1: TGroupBox;
- Timer2: TTimer;
- procedure Timer1Timer(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure Timer2Timer(Sender: TObject);
- private
- procedure shape();
- procedure create();
- end;
- type
- TFrag = record
- fragment:tshape;
- PosX, Posy, Velx, Vely, x, y:integer;
- end;
- var
- frag:array[1..8] of TFrag;
- Form1: TForm1;
- PosX, Posy, Velx, Vely, Shape1Top, Shape1Left, x, y, i:integer;
- implementation
- {$R *.dfm}
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- // Начальные координаты шарика
- PosX:=450;
- PosY:=250;
- VelX:=4;
- VelY:=4;
- end;
- procedure TForm1.Timer1Timer(Sender: TObject);
- var i1,j1:integer;
- begin
- shape;
- end;
- procedure TForm1.shape;
- begin
- // Текущая координата шарика + скорость
- PosX := PosX+VelX;
- PosY := PosY+VelY;
- // X координата
- if PosX > Panel1.ClientWidth - Shape1.Width then
- begin
- PosX:= Panel1.ClientWidth - Shape1.Width;
- VelX:= - VelX;
- end
- else if PosX < 0 then
- begin
- POsX := 0;
- VelX := - VelX;
- end;
- // Y координата
- if PosY > Panel1.ClientHeight - Shape1.Width then
- begin
- POsY:= Panel1.ClientHeight - Shape1.Width;
- VelY:= - VelY;
- end
- else if PosY < 0 then
- begin
- POsY:= 0;
- VelY:= - VelY;
- end;
- // Полет шарика
- Shape1.Left:= Round(PosX);
- Shape1.Top:= Round(PosY);
- end;
- procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- begin
- // Остановка таймера шарика
- timer1.Enabled:=false;
- // Сохранение координат шарика и его удаление
- Shape1Left:=shape1.Left;
- Shape1Top:=shape1.Top;
- shape1.Destroy;
- create;
- // Запуск таймера "осколков"
- timer2.Enabled:=true;
- end;
- procedure TForm1.create;
- begin
- for i:=1 to 8 do
- // Создание "осколков" шарика
- begin
- frag[i].fragment:=TShape.Create(Form1.Panel1);
- frag[i].fragment.Parent:=Form1.Panel1;
- frag[i].fragment.shape:=stCircle;
- frag[i].fragment.Width:=50;
- frag[i].fragment.Height:=50;
- // Присвоение "осколкам" координат остановки шарика
- frag[i].fragment.Left:=Shape1Left+25;
- frag[i].fragment.Top:=Shape1Top+25;
- end;
- end;
- procedure TForm1.Timer2Timer(Sender: TObject);
- begin
- // Разлет "осколков"
- // Юг
- frag[1].fragment.Top:=frag[1].fragment.Top+4;
- // Север
- frag[2].fragment.Top:=frag[2].fragment.Top-4;
- // Восток
- frag[3].fragment.Left:=frag[3].fragment.Left+4;
- // Запад
- frag[4].fragment.Left:=frag[4].fragment.Left-4;
- // Юго-восток
- frag[5].fragment.Top:=frag[5].fragment.Top+3;
- frag[5].fragment.Left:=frag[5].fragment.Left+3;
- // Юго-запад
- frag[6].fragment.Top:=frag[6].fragment.Top+3;
- frag[6].fragment.Left:=frag[6].fragment.Left-3;
- // Северо-восток
- frag[7].fragment.Top:=frag[7].fragment.Top-3;
- frag[7].fragment.Left:=frag[7].fragment.Left+3;
- // Северо-запад
- frag[8].fragment.Top:=frag[8].fragment.Top-3;
- frag[8].fragment.Left:=frag[8].fragment.Left-3;
- end;
- end.
Add Comment
Please, Sign In to add comment