Реализовать двигающийся объект - Pascal

Узнай цену своей работы

Формулировка задачи:

Составить программу на языке Pascal для решения задачи с использованием типа данных «объект» Нужно вот этот код сделать с типом данных "объект":
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.
P.s код был написан в TurboPascal

Решение задачи: «Реализовать двигающийся объект»

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.

Объяснение кода листинга программы

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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы