Реализовать двигающийся объект - 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
- переменная - присваивается значениеradiusP
dt
- переменная - присваивается значениеdetect
dm
- переменная - не инициализируетсяInitGraph(dt, dm, 'C:\Program Files\SchoolPak\pak\BP\svga.bgi')
- инициализация графического режима со значениямиdt
,dm
и путем к файлуsvga.bgi
ClearDevice()
- очистка графического устройства
- Деструктор
Done
:- Закрытие графического режима
- Процедура
CLine
:incr
- параметр - шаг изменения положения кругаx
,y
- переменные - координаты для рисования круга- Цикл для движения круга по горизонтали и возврату обратно
- Процедура
CCircle
:angleIncr
- параметр - шаг изменения угла в радианахi
,x0
,y0
,rad
- переменные - используются для рисования круга вокруг точки (x0, y0)- Вычисление и рисование круга при увеличении угла на определенный шаг
- Объявление и использование переменной
circ
типаTCircle
:circ
- переменная - создание экземпляра объектаTCircle
Init(20)
- вызов конструктораInit
с параметромradiusP
= 20CLine(50)
- вызов процедурыCLine
с параметромincr
= 50CCircle(1)
- вызов процедурыCCircle
с параметромangleIncr
= 1Done
- вызов деструктораDone
объектаcirc
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д