Guest User

Untitled

a guest
Aug 5th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 3.55 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, ExtCtrls, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Panel1: TPanel;
  12.     Timer1: TTimer;
  13.     Shape1: TShape;
  14.     GroupBox1: TGroupBox;
  15.     Timer2: TTimer;
  16.     procedure Timer1Timer(Sender: TObject);
  17.     procedure FormCreate(Sender: TObject);
  18.     procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  19.     Shift: TShiftState; X, Y: Integer);
  20.     procedure Timer2Timer(Sender: TObject);
  21.   private
  22.     procedure shape();
  23.     procedure create();
  24.   end;
  25.  
  26. type
  27.   TFrag = record
  28.     fragment:tshape;
  29.     PosX, Posy, Velx, Vely, x, y:integer;
  30.   end;
  31.  
  32. var
  33.   frag:array[1..8] of TFrag;
  34.     Form1: TForm1;
  35.     PosX, Posy, Velx, Vely, Shape1Top, Shape1Left, x, y, i:integer;
  36.  
  37. implementation
  38.  
  39. {$R *.dfm}
  40.  
  41. procedure TForm1.FormCreate(Sender: TObject);
  42. begin
  43. // Начальные координаты шарика
  44.   PosX:=450;
  45.   PosY:=250;
  46.   VelX:=4;
  47.   VelY:=4;
  48. end;
  49.  
  50. procedure TForm1.Timer1Timer(Sender: TObject);
  51. var i1,j1:integer;
  52. begin
  53.   shape;
  54. end;
  55.  
  56. procedure TForm1.shape;
  57. begin
  58. // Текущая координата шарика + скорость
  59.   PosX := PosX+VelX;
  60.   PosY := PosY+VelY;
  61. // X координата
  62. if PosX > Panel1.ClientWidth - Shape1.Width then
  63. begin
  64.   PosX:= Panel1.ClientWidth - Shape1.Width;
  65.   VelX:= - VelX;
  66. end
  67. else if PosX < 0 then
  68. begin
  69.   POsX := 0;
  70.   VelX := - VelX;
  71. end;
  72. // Y координата
  73. if PosY > Panel1.ClientHeight - Shape1.Width then
  74. begin
  75.   POsY:= Panel1.ClientHeight - Shape1.Width;
  76.   VelY:= - VelY;
  77. end
  78. else if PosY < 0 then
  79. begin
  80.   POsY:= 0;
  81.   VelY:= - VelY;
  82. end;
  83. // Полет шарика
  84.   Shape1.Left:= Round(PosX);
  85.   Shape1.Top:= Round(PosY);
  86. end;
  87.  
  88. procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
  89.   Shift: TShiftState; X, Y: Integer);
  90. begin
  91. // Остановка таймера шарика
  92.   timer1.Enabled:=false;
  93. // Сохранение координат шарика и его удаление
  94.   Shape1Left:=shape1.Left;
  95.   Shape1Top:=shape1.Top;
  96.   shape1.Destroy;
  97.   create;
  98. // Запуск таймера "осколков"
  99.   timer2.Enabled:=true;
  100. end;
  101.  
  102. procedure TForm1.create;
  103. begin
  104.   for i:=1 to 8 do
  105. // Создание "осколков" шарика
  106.   begin
  107.     frag[i].fragment:=TShape.Create(Form1.Panel1);
  108.     frag[i].fragment.Parent:=Form1.Panel1;
  109.     frag[i].fragment.shape:=stCircle;
  110.     frag[i].fragment.Width:=50;
  111.     frag[i].fragment.Height:=50;
  112. // Присвоение "осколкам" координат остановки шарика
  113.     frag[i].fragment.Left:=Shape1Left+25;
  114.     frag[i].fragment.Top:=Shape1Top+25;
  115.   end;
  116. end;
  117.  
  118. procedure TForm1.Timer2Timer(Sender: TObject);
  119. begin
  120. // Разлет "осколков"
  121. // Юг
  122.   frag[1].fragment.Top:=frag[1].fragment.Top+4;
  123. // Север
  124.   frag[2].fragment.Top:=frag[2].fragment.Top-4;
  125. // Восток
  126.   frag[3].fragment.Left:=frag[3].fragment.Left+4;
  127. // Запад
  128.   frag[4].fragment.Left:=frag[4].fragment.Left-4;
  129. // Юго-восток
  130.   frag[5].fragment.Top:=frag[5].fragment.Top+3;
  131.   frag[5].fragment.Left:=frag[5].fragment.Left+3;
  132. // Юго-запад
  133.   frag[6].fragment.Top:=frag[6].fragment.Top+3;
  134.   frag[6].fragment.Left:=frag[6].fragment.Left-3;
  135. // Северо-восток
  136.   frag[7].fragment.Top:=frag[7].fragment.Top-3;
  137.   frag[7].fragment.Left:=frag[7].fragment.Left+3;
  138. // Северо-запад
  139.   frag[8].fragment.Top:=frag[8].fragment.Top-3;
  140.   frag[8].fragment.Left:=frag[8].fragment.Left-3;
  141. end;
  142.  
  143. end.
Add Comment
Please, Sign In to add comment