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

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

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

Составить программу на языке Pascal для решения задачи с использованием типа данных «объект» Нужно вот этот код сделать с типом данных "объект":
Листинг программы
  1. uses crt,graph;
  2. label L1,L2;
  3. var dt,dm,n,x,y,i:integer;
  4. x1,y1:real;
  5. begin
  6. write('choose: ');
  7. write(' 1-Line ');
  8. writeln(' 2-circle');
  9. readln(n);
  10. clrscr;
  11. if n=1 then begin
  12. dt:=detect;
  13. initgraph(dt,dm,'C:\Program Files\SchoolPak\pak\BP\svga.bgi');
  14. cleardevice;
  15. L2:
  16. x:=20;y:=240;
  17. while x<=620 do
  18. begin
  19. delay(50);
  20. circle(x,y,20); {**¬*«оў*«Ё Є®«®}
  21. cleardevice;
  22. x:=x+10;
  23. delay(50);
  24. circle(x,y,20);
  25. if x=620 then goto L1;
  26. end;
  27. L1:
  28. x:=620;y:=240;
  29. while x>=20 do
  30. begin
  31. delay(50);
  32. circle(x,y,20);
  33. cleardevice;
  34. x:=x-10;
  35. delay(50);
  36. circle(x,y,20);
  37. if x=20 then goto L2;
  38. end;
  39. end;
  40. if n=2 then begin
  41. dt:=detect;
  42. initgraph(dt,dm,'C:\Program Files\SchoolPak\pak\BP\svga.bgi');
  43. cleardevice;
  44. x1:=300;y1:=100;
  45. while 1<2 do
  46. begin
  47. for i:=1 to 360 do
  48. begin
  49. delay(10);
  50. circle(round(x1),round(y1),20);
  51. cleardevice;
  52. x1:=round(x1+3*cos(i*3.14/180));
  53. y1:=round(y1+3*sin(i*3.14/180));
  54. delay(10);
  55. circle(round(x1),round(y1),20);
  56. end;
  57. end;
  58. end;
  59. repeat until keypressed;
  60. closegraph;
  61. end.
P.s код был написан в TurboPascal

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

textual
Листинг программы
  1. {$MODE TP}
  2. uses
  3.     Crt, Graph;
  4. type
  5.     TCircle = object
  6.         radius: Word;
  7.         dt, dm: Integer;
  8.         constructor Init(const radiusP: Word);
  9.         destructor Done;
  10.         procedure CLine(const incr: Word);
  11.         procedure CCircle(const angleIncr: Word);
  12.     end;
  13.  
  14. constructor TCircle.Init(const radiusP: Word);
  15. begin
  16.     radius := radiusP;
  17.     dt := detect;
  18.     InitGraph(dt, dm, 'C:\Program Files\SchoolPak\pak\BP\svga.bgi');
  19.     ClearDevice();
  20. end;
  21.  
  22. destructor TCircle.Done;
  23. begin
  24.     CloseGraph;
  25. end;
  26.  
  27. procedure TCircle.CLine(const incr: Word);
  28. var
  29.     x, y: Word;
  30. begin
  31.     x := radius + 1;
  32.     y := GetMaxY div 2;
  33.     while (GetMaxX >= x + radius + incr) do
  34.     begin
  35.         ClearDevice();
  36.         Delay(5 * incr);
  37.         Circle(x, y, radius);
  38.         Inc(x, incr);
  39.         Delay(5 * incr);
  40.         Circle(x, y, radius);
  41.     end;
  42.     while (x >= radius + incr) do
  43.     begin
  44.         ClearDevice();
  45.         Delay(5 * incr);
  46.         Circle(x, y, radius);
  47.         Dec(x, incr);
  48.         Delay(5 * incr);
  49.         Circle(x, y, radius);
  50.     end;
  51. end;
  52. procedure TCircle.CCircle(const angleIncr: Word);
  53. var
  54.     i, x0, y0: Word;
  55.     rad: Double;
  56. begin
  57.     x0 := GetMaxX div 2;
  58.     y0 := GetMaxY div 2;
  59.     if (x0 < y0)
  60.     then
  61.         rad := x0
  62.     else
  63.         rad := y0;
  64.     rad := rad - radius * 1.1; i := 1;
  65.     while (i <= 360) do
  66.     begin
  67.         Delay(10 * angleIncr);
  68.         Circle(Round(x0 + rad * Sin(i * PI / 180)), Round(y0 + rad * Cos(i * PI / 180)), radius);
  69.         ClearDevice();
  70.         Delay(10 * angleIncr);
  71.         Circle(Round(x0 + rad * Sin(i * PI / 180)), Round(y0 + rad * Cos(i * PI / 180)), radius);
  72.         Inc(i);
  73.     end;
  74. end;
  75. var
  76.     circ: TCircle;
  77. begin
  78.     ClrScr;
  79.     with circ do
  80.     begin
  81.         Init(20);
  82.         CLine(50);
  83.         CCircle(1);
  84.         Done;
  85.     end;
  86. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы