Міністерство освіти України
Національний університет «Львівська політехніка»
Кафедра автоматизованих систем управління
Розрахункова робота
з курсу
«Об'єктно-орієнтоване програмування»
Завдання
Створити проект Delphi для побудови рухомих графічних зображень. Основні елементи зображення розглядати як об’єкти класів, які необхідно ввести та описати. Рух або зміну об’єктів реалізувати за допомогою відповідних методів класів. Рух більшості об’єктів здійснюється зліва направо, а тоді повторюється або змінює напрямок. Програма має реагувати на керуючі клавіші: 1) для видачі підказки; 2) для зупинки (паузи) та продовження руху; 3) старт із початкового стану; 4) збільшення-зменшення об’єкта; 5) уповільнення-прискорення руху; 6) завершення програми.
Примітка. Опис класів та реалізацію методів виконати в окремому програмному модулі.
Індивідуальне завдання
Стрибок із трампліна.
Текст програми:
Lb3.pas
unit lb3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,Car;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
car1:TCar;
implementation
uses lb3_1;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
n, x, y,g1,yp:integer;
Fi:real;
t,r,g,yzz: double;
xr,yr:integer;
xz,yz,k: integer;
m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12:integer;
n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12:integer;
k1,k2,k3,k4,l1,l2,l3,l4:integer;
x0,y0:integer;
mn1,mn2,mn3,mn4,mn5,mn6,mn7,mn8,mn9,mn10,mn11,mn12:integer;
nn1,nn2,nn3,nn4,nn5,nn6,nn7,nn8,nn9,nn10,nn11,nn12:integer;
kn1,kn2,kn3,kn4,ln1,ln2,ln3,ln4:integer;
tk,yk:integer;
begin
with Canvas do { працюємо з властивістю Canvas класу TForm } begin
//ochushchennya
PatBlt(Form1.Canvas.Handle, 0, 0,
Form1.ClientWidth, Form1.ClientHeight, WHITENESS);
Pen.Color := clBlack; { створити синє перо }
Brush.Color := clBlack; { створити жовтий пензель }
car1:=Tcar.Create;
car1.carbuild(Form1.Canvas);
car1.track(Form1.Canvas);
car1.move(Form1.Canvas);
// tramplin
//mashuna
//ruh
//do trampliny
end;
end;
end.
Car.pas
unit Car;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls;
type Tcar = class(TObject)
n, x, y,g1,yp:integer;
Fi:real;
t,r,g,yzz: double;
xr,yr:integer;
xz,yz,k: integer;
m1,m2,m3,m4,m5,m6,m7,m8,m9,m10,m11,m12:integer;
n1,n2,n3,n4,n5,n6,n7,n8,n9,n10,n11,n12:integer;
k1,k2,k3,k4,l1,l2,l3,l4:integer;
x0,y0:integer;
mn1,mn2,mn3,mn4,mn5,mn6,mn7,mn8,mn9,mn10,mn11,mn12:integer;
nn1,nn2,nn3,nn4,nn5,nn6,nn7,nn8,nn9,nn10,nn11,nn12:integer;
kn1,kn2,kn3,kn4,ln1,ln2,ln3,ln4:integer;
tk,yk:integer;
procedure track(c:TCanvas);
procedure carbuild(c:TCanvas);
procedure move(c:TCanvas);
end;
implementation
procedure TCar.track(c:Tcanvas);
begin
with c do begin
Pen.Color := clBlack;
moveto(0,400);
lineto(330,400);
lineto(520,335);
lineto(520,400);
lineto(1100,400);
end;
end;
procedure Tcar.carbuild(c:Tcanvas);
begin
with c do begin
xr:=0;
yr:=0;
Pen.Color := clred;
Ellipse(10+xr,380+yr,30+xr,400+yr);
Ellipse(60+xr,380+yr,80+xr,400+yr);
moveto(30+xr,390+yr);
lineto(60+xr,390+yr);
moveto(80+xr,390+yr);
lineto(90+xr,390+yr);
lineto(90+xr,370+yr);
lineto(65+xr,370+yr);
lineto(55+xr,360+yr);
lineto(35+xr,360+yr);
lineto(20+xr,370+yr);
lineto(10+xr,370+yr);
lineto(10+xr,390+yr);
Pen.Color := clred;
end;
end;
procedure Tcar.move(c:Tcanvas);
begin
with c do begin
while (xr<260) do
begin
Sleep(1);
//sturannya mashunu
Pen.Color := clwhite;
Brush.Color := clwhite;
Ellipse(10+xr,380+yr,30+xr,400+yr);
Ellipse(60+xr,380+yr,80+xr,400+yr);
moveto(30+xr,390+yr);
lineto(60+xr,390+yr);
moveto(80+xr,390+yr);
lineto(90+xr,390+yr);
lineto(90+xr,370+yr);
lineto(65+xr,370+yr);
lineto(55+xr,360+yr);
lineto(35+xr,360+yr);
lineto(20+xr,370+yr);
lineto(10+xr,370+yr);
lineto(10+xr,390+yr);
//malyvannya za novumu koot=rdunatamu
xr:=xr+1;
Pen.Color := clred;
Brush.Color := clblack;
Ellipse(10+xr,380+yr,30+xr,400+yr);
Ellipse(60+xr,380+yr,80+xr,400+yr);
moveto(30+xr,390+yr);
lineto(60+xr,390+yr);
moveto(80+xr,390+yr);
lineto(90+xr,390+yr);
lineto(90+xr,370+yr);
lineto(65+xr,370+yr);
lineto(55+xr,360+yr);
lineto(35+xr,360+yr);
lineto(20+xr,370+yr);
lineto(10+xr,370+yr);
lineto(10+xr,390+yr);
end;
//znovy sturannya
//sturannya mashunu
Pen.Color := clwhite;
Brush.Color := clwhite;
Ellipse(10+xr,380+yr,30+xr,400+yr);
Ellipse(60+xr,380+yr,80+xr,400+yr);
moveto(30+xr,390+yr);
lineto(60+xr,390+yr);
moveto(80+xr,390+yr);
lineto(90+xr,390+yr);
lineto(90+xr,370+yr);
lineto(65+xr,370+yr);
lineto(55+xr,360+yr);
lineto(35+xr,360+yr);
lineto(20+xr,370+yr);
lineto(10+xr,370+yr);
lineto(10+xr,390+yr);
//ruh po tramplinu
fi:=-24;
x0:=0 ;
y0:=0;
Fi := fi* Pi / 180;
yr:=400;
xr:=280;
m1:=30;
m2:=60;
m3:=80;
m4:=90;
m5:=90;
m6:=65;
m7:=55;
m8:=35;
m9:=20;
m10:=10;
m11:=10;
n1:=390;
n2:=390;
n3:=390;
n4:=390;
n5:=370;
n6:=370;
n7:=360;
n8:=360;
n9:=370;
n10:=370;
n11:=390;
k1:=10;
k2:=30;
k3:=60;
k4:=80;
l1:=380;
l2:=400;
l3:=380;
l4:=400;
x0:=40+xr;
y0:=yr-15;
mn1:= x0 + round((cos(fi) * (m1 - x0)) - (sin(fi) * (n1 - y0)));
nn1:= y0 + round((sin(fi) * (m1 - x0)) + (cos(fi) * (n1 - y0)));
mn2:= x0 + round((cos(fi) * (m2 - x0)) - (sin(fi) * (n2 - y0)));
nn2:= y0 + round((sin(fi) * (m2 - x0)) + (cos(fi) * (n2 - y0)));
mn3:= x0 + round((cos(fi) * (m3 - x0)) - (sin(fi) * (n3 - y0)));
nn3:= y0 + round((sin(fi) * (m3 - x0)) + (cos(fi) * (n3 - y0)));
mn4:= x0 + round((cos(fi) * (m4 - x0)) - (sin(fi) * (n4 - y0)));
nn4:= y0 + round((sin(fi) * (m4 - x0)) + (cos(fi) * (n4 - y0)));
mn5:= x0 + round((cos(fi) * (m5 - x0)) - (sin(fi) * (n5 - y0)));
nn5:= y0 + round((sin(fi) * (m5 - x0)) + (cos(fi) * (n5 - y0)));
mn6:= x0 + round((cos(fi) * (m6 - x0)) - (sin(fi) * (n6 - y0)));
nn6:= y0 + round((sin(fi) * (m6 - x0)) + (cos(fi) * (n6 - y0)));
mn7:= x0 + round((cos(fi) * (m7 - x0)) - (sin(fi) * (n7 - y0)));
nn7:= y0 + round((sin(fi) * (m7 - x0)) + (cos(fi) * (n7 - y0)));
mn8:= x0 + round((cos(fi) * (m8 - x0)) - (sin(fi) * (n8 - y0)));
nn8:= y0 + round((sin(fi) * (m8 - x0)) + (cos(fi) * (n8 - y0)));
mn9:= x0 + round((cos(fi) * (m9 - x0)) - (sin(fi) * (n9 - y0)));
nn9:= y0 + round((sin(fi) * (m9 - x0)) + (cos(fi) * (n9 - y0)));
mn10:= x0 + round((cos(fi) * (m10 - x0)) - (sin(fi) * (n10 - y0)));
nn10:= y0 + round((sin(fi) * (m10 - x0)) + (cos(fi) * (n10 - y0)));
mn11:= x0 + round((cos(fi) * (m11 - x0)) - (sin(fi) * (n11 - y0)));
nn11:= y0 + round((sin(fi) * (m11 - x0)) + (cos(fi) * (n11 - y0)));
kn1:= x0 + round((cos(fi) * (k1 - x0)) - (sin(fi) * (l1 - y0)));
ln1:= y0 + round((sin(fi) * (k1 - x0)) + (cos(fi) * (l1 - y0)));
kn2:= x0 + round((cos(fi) * (k2 - x0)) - (sin(fi) * (l2 - y0)));
ln2:= y0 + round((sin(fi) * (k2 - x0)) + (cos(fi) * (l2 - y0)));
kn3:= x0 + round((cos(fi) * (k3 - x0)) - (sin(fi) * (l3 - y0)));
ln3:= y0 + round((sin(fi) * (k3 - x0)) + (cos(fi) * (l3 - y0)));
kn4:= x0 + round((cos(fi) * (k4 - x0)) - (sin(fi) * (l4 - y0)));
ln4:= y0 + round((sin(fi) * (k4 - x0)) + (cos(fi) * (l4 - y0)));
//malyvannya za novumu koordunatamu
// xr:=xr+1;
Pen.Color := clred;
Brush.Color := clblack;
//Ellipse(kn1+xr,ln1-120,kn2+xr,ln2-120);
//Ellipse(kn3+xr,ln3-120,kn4+xr,ln4-120);
Ellipse(320,380,340,400);
Ellipse(360,360,380,380);
moveto(mn1+xr,nn1-120);
lineto(mn2+xr,nn2-120);
moveto(mn3+xr,nn3-120);
lineto(mn4+xr,nn4-120);
lineto(mn5+xr,nn5-120);
lineto(mn6+xr,nn6-120);
lineto(mn7+xr,nn7-120);
lineto(mn8+xr,nn8-120);
lineto(mn9+xr,nn9-120);
lineto(mn10+xr,nn1-120);
lineto(mn11+xr,nn11-120);
yp:=0;
tk:=0;
yk:=0;
while (xr<460) do
begin
Sleep(20);
// sturannya mashunu
Pen.Color := clwhite;
Brush.Color := clwhite;
Ellipse(320+tk,380-yk,340+tk,400-yk);
Ellipse(360+tk,360-yk,380+tk,380-yk);
moveto(mn1+xr,nn1-120-yp);
lineto(mn2+xr,nn2-120-yp);
moveto(mn3+xr,nn3-120-yp);
lineto(mn4+xr,nn4-120-yp);
lineto(mn5+xr,nn5-120-yp);
lineto(mn6+xr,nn6-120-yp);
lineto(mn7+xr,nn7-120-yp);
lineto(mn8+xr,nn8-120-yp);
lineto(mn9+xr,nn9-120-yp);
lineto(mn10+xr,nn1-120-yp);
lineto(mn11+xr,nn11-120-yp);
//maluvannya
Pen.Color := clred;
Brush.Color := clblack;
xr:=xr+3;
yp:=yp+1;
tk:=tk+3;
yk:=yk+1;
Ellipse(320+tk,380-yk,340+tk,400-yk);
Ellipse(360+tk,360-yk,380+tk,380-yk);
moveto(mn1+xr,nn1-120-yp);
lineto(mn2+xr,nn2-120-yp);
moveto(mn3+xr,nn3-120-yp);
lineto(mn4+xr,nn4-120-yp);
lineto(mn5+xr,nn5-120-yp);
lineto(mn6+xr,nn6-120-yp);
lineto(mn7+xr,nn7-120-yp);
lineto(mn8+xr,nn8-120-yp);
lineto(mn9+xr,nn9-120-yp);
lineto(mn10+xr,nn1-120-yp);
lineto(mn11+xr,nn11-120-yp);
Pen.Color := clblack;
moveto(330,400);
lineto(520,335);
end;
//polit mashunu
// sturannya mashunu
Pen.Color := clwhite;
Brush.Color := clwhite;
Ellipse(320+tk,380-yk,340+tk,400-yk);
Ellipse(360+tk,360-yk,380+tk,380-yk);
moveto(mn1+xr,nn1-120-yp);
lineto(mn2+xr,nn2-120-yp);
moveto(mn3+xr,nn3-120-yp);
lineto(mn4+xr,nn4-120-yp);
lineto(mn5+xr,nn5-120-yp);
lineto(mn6+xr,nn6-120-yp);
lineto(mn7+xr,nn7-120-yp);
lineto(mn8+xr,nn8-120-yp);
lineto(mn9+xr,nn9-120-yp);
lineto(mn10+xr,nn1-120-yp);
lineto(mn11+xr,nn11-120-yp);
k:=0;
xr:=500;
yr:=-75;
while (xr<1000) do
begin
Sleep(1);
//sturannya mashunu
Pen.Color := clwhite;
Brush.Color := clwhite;
Ellipse(10+xr,380+yr,30+xr,400+yr);
Ellipse(60+xr,380+yr,80+xr,400+yr);
moveto(30+xr,390+yr);
lineto(60+xr,390+yr);
moveto(80+xr,390+yr);
lineto(90+xr,390+yr);
lineto(90+xr,370+yr);
lineto(65+xr,370+yr);
lineto(55+xr,360+yr);
lineto(35+xr,360+yr);
lineto(20+xr,370+yr);
lineto(10+xr,370+yr);
lineto(10+xr,390+yr);
//malyvannya za novumu koot=rdunatamu
xr:=xr+2;
k:=k+1;
if yr=0 then k:=-100000;
if k=3 then
begin
yr:=yr+1;
k:=0;
end;
Pen.Color := clred;
Brush.Color := clblack;
Ellipse(10+xr,380+yr,30+xr,400+yr);
Ellipse(60+xr,380+yr,80+xr,400+yr);
moveto(30+xr,390+yr);
lineto(60+xr,390+yr);
moveto(80+xr,390+yr);
lineto(90+xr,390+yr);
lineto(90+xr,370+yr);
lineto(65+xr,370+yr);
lineto(55+xr,360+yr);
lineto(35+xr,360+yr);
lineto(20+xr,370+yr);
lineto(10+xr,370+yr);
lineto(10+xr,390+yr);
end;
end;
end;
end.
Результати
Висновок: я створив проект Delphi для побудови рухомих графічних зображень. Рух і зміну об’єктів реалізував за допомогою відповідних методів класу.