Реализовать двигающийся объект - Pascal
Формулировка задачи:
Составить программу на языке Pascal для решения задачи с использованием типа данных «объект»
Нужно вот этот код сделать с типом данных "объект":
P.s код был написан в TurboPascal
uses crt,graph;
label L1,L2;
var dt,dm,n,x,y,i:integer;
x1,y1:real;
begin
write('choose: ');
write(' 1-Line ');
writeln(' 2-circle');
readln(n);
clrscr;
if n=1 then begin
dt:=detect;
initgraph(dt,dm,'C:\Program Files\SchoolPak\pak\BP\svga.bgi');
cleardevice;
L2:
x:=20;y:=240;
while x<=620 do
begin
delay(50);
circle(x,y,20); {**¬*«оў*«Ё Є®«®}
cleardevice;
x:=x+10;
delay(50);
circle(x,y,20);
if x=620 then goto L1;
end;
L1:
x:=620;y:=240;
while x>=20 do
begin
delay(50);
circle(x,y,20);
cleardevice;
x:=x-10;
delay(50);
circle(x,y,20);
if x=20 then goto L2;
end;
end;
if n=2 then begin
dt:=detect;
initgraph(dt,dm,'C:\Program Files\SchoolPak\pak\BP\svga.bgi');
cleardevice;
x1:=300;y1:=100;
while 1<2 do
begin
for i:=1 to 360 do
begin
delay(10);
circle(round(x1),round(y1),20);
cleardevice;
x1:=round(x1+3*cos(i*3.14/180));
y1:=round(y1+3*sin(i*3.14/180));
delay(10);
circle(round(x1),round(y1),20);
end;
end;
end;
repeat until keypressed;
closegraph;
end.Решение задачи: «Реализовать двигающийся объект»
textual
Листинг программы
{$MODE TP}
uses
Crt, Graph;
type
TCircle = object
radius: Word;
dt, dm: Integer;
constructor Init(const radiusP: Word);
destructor Done;
procedure CLine(const incr: Word);
procedure CCircle(const angleIncr: Word);
end;
constructor TCircle.Init(const radiusP: Word);
begin
radius := radiusP;
dt := detect;
InitGraph(dt, dm, 'C:\Program Files\SchoolPak\pak\BP\svga.bgi');
ClearDevice();
end;
destructor TCircle.Done;
begin
CloseGraph;
end;
procedure TCircle.CLine(const incr: Word);
var
x, y: Word;
begin
x := radius + 1;
y := GetMaxY div 2;
while (GetMaxX >= x + radius + incr) do
begin
ClearDevice();
Delay(5 * incr);
Circle(x, y, radius);
Inc(x, incr);
Delay(5 * incr);
Circle(x, y, radius);
end;
while (x >= radius + incr) do
begin
ClearDevice();
Delay(5 * incr);
Circle(x, y, radius);
Dec(x, incr);
Delay(5 * incr);
Circle(x, y, radius);
end;
end;
procedure TCircle.CCircle(const angleIncr: Word);
var
i, x0, y0: Word;
rad: Double;
begin
x0 := GetMaxX div 2;
y0 := GetMaxY div 2;
if (x0 < y0)
then
rad := x0
else
rad := y0;
rad := rad - radius * 1.1; i := 1;
while (i <= 360) do
begin
Delay(10 * angleIncr);
Circle(Round(x0 + rad * Sin(i * PI / 180)), Round(y0 + rad * Cos(i * PI / 180)), radius);
ClearDevice();
Delay(10 * angleIncr);
Circle(Round(x0 + rad * Sin(i * PI / 180)), Round(y0 + rad * Cos(i * PI / 180)), radius);
Inc(i);
end;
end;
var
circ: TCircle;
begin
ClrScr;
with circ do
begin
Init(20);
CLine(50);
CCircle(1);
Done;
end;
end.
Объяснение кода листинга программы
- Объявление типа TCircle:
TCircle- тип объекта, содержащего переменныеradius,dtиdm, а также конструкторInit, деструкторDoneи процедурыCLineиCCircle.
- Конструктор
Init:radiusP- параметр - радиус круга объектаradius- переменная - присваивается значениеradiusPdt- переменная - присваивается значениеdetectdm- переменная - не инициализируетсяInitGraph(dt, dm, 'C:\Program Files\SchoolPak\pak\BP\svga.bgi')- инициализация графического режима со значениямиdt,dmи путем к файлуsvga.bgiClearDevice()- очистка графического устройства
- Деструктор
Done:- Закрытие графического режима
- Процедура
CLine:incr- параметр - шаг изменения положения кругаx,y- переменные - координаты для рисования круга- Цикл для движения круга по горизонтали и возврату обратно
- Процедура
CCircle:angleIncr- параметр - шаг изменения угла в радианахi,x0,y0,rad- переменные - используются для рисования круга вокруг точки (x0, y0)- Вычисление и рисование круга при увеличении угла на определенный шаг
- Объявление и использование переменной
circтипаTCircle:circ- переменная - создание экземпляра объектаTCircleInit(20)- вызов конструктораInitс параметромradiusP= 20CLine(50)- вызов процедурыCLineс параметромincr= 50CCircle(1)- вызов процедурыCCircleс параметромangleIncr= 1Done- вызов деструктораDoneобъектаcirc