10.10.2017, 05:19
|
Модератор
|
|
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
|
|
Вот, пришел домой, быстренько накидал рабочий примерчик броска кирпича вверх (по параболе):
Код:
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm2 = class(TForm)
PaintBox1: TPaintBox;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Timer1: TTimer;
procedure Button3Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
x, y, v, a : integer;
procedure DrawObject(ax,ay : integer);
procedure NextStep(var ax, ay, av : integer; aa: integer);
procedure TimerStartStop(tmStart : Boolean);
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
TimerStartStop(True);
end;
procedure TForm2.Button2Click(Sender: TObject);
begin
TimerStartStop(False);
end;
procedure TForm2.Button3Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.TimerStartStop(tmStart : Boolean);
begin
Timer1.Enabled := tmStart;
Button1.Enabled := not Timer1.Enabled;
Button2.Enabled := Timer1.Enabled;
end;
procedure TForm2.FormCreate(Sender: TObject);
begin
x := 0;
y := 0;
a := -3;
v := 100;
DrawObject(x,PaintBox1.Height-y); // Reverse y
end;
procedure TForm2.DrawObject(ax,ay : integer);
begin
With PaintBox1.Canvas Do
begin
FillRect(Rect(0,0,PaintBox1.Width, PaintBox1.Height));
MoveTo(ax-3,ay-3);
LineTo(ax+3,ay-3);
LineTo(ax+3,ay+3);
LineTo(ax-3,ay+3);
LineTo(ax-3,ay-3);
End;
end;
procedure TForm2.NextStep(var ax, ay, av : integer; aa: integer);
begin
// s = s0 + vt + at^2/2
ax := ax + 1;
av := av + aa*x;
ay := ax*av + round(aa*sqr(x)/2);
// end trajectory, start again
if ay < 0 Then
begin
ax := 0;
ay := 0;
av := 100;
end;
end;
procedure TForm2.Timer1Timer(Sender: TObject);
begin
NextStep(x,y,v,a);
DrawObject(x*10,PaintBox1.Height-y); // Reverse y
end;
end.
|