Нарисовать простой вентилятор - Turbo Pascal

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

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

Нужна помощь с графикой. Нужно нарисовать простой вентилятор (круг с 2-3 треугольниками внутри) у которого вращение лопастей включается/выключается нажатием клавиши на клавиатуре.

Решение задачи: «Нарисовать простой вентилятор»

textual
Листинг программы
  1. uses graph,crt;
  2. type Vent=object
  3.           x,y,r1,r2,cl:integer;{поля: координаты центра вентилятора,
  4.                                 радиусы, цвет лопастей}
  5.           u:real; {угол поворота лопастей}
  6.           procedure init(ax,ay,ar1,ar2:integer);{создание объекта,
  7.                                                  рисование корпуса}
  8.           procedure lop;{рисование лопастей}
  9.           procedure new_color(acl:integer);{смена цвета лопастей}
  10.           procedure new_angle;{смена угла поворота лопастей}
  11.           end;
  12. procedure Vent.init(ax,ay,ar1,ar2:integer);
  13. begin
  14. x:=ax;
  15. y:=ay;
  16. r1:=ar1;
  17. r2:=ar2;
  18. cl:=8;
  19. u:=pi/2;
  20. setcolor(7);
  21. setfillstyle(1,7);
  22. fillellipse(x,y,r1,r1);
  23. setcolor(14);
  24. setfillstyle(1,14);
  25. fillellipse(x,y,r2,r2);
  26. setcolor(15);
  27. outtextXY(x-90,10,'1-pusk 2-stop esc-vyhod');
  28. end;
  29. procedure Vent.new_color(acl:integer);
  30. begin
  31. cl:=acl;
  32. end;
  33. procedure Vent.new_angle;
  34. begin
  35. u:=u-0.5;
  36. end;
  37. procedure Vent.lop;
  38. var a:real;
  39.     i:byte;
  40.     x1,y1,x2,y2,x3,y3:integer;
  41. begin
  42. setcolor(cl);
  43. setfillstyle(1,cl);
  44. a:=0;
  45. for i:=1 to 3 do
  46.  begin
  47.   x1:=x+round((r2+2)*cos(u+a-pi/4));
  48.   y1:=y-round((r2+2)*sin(u+a-pi/4));
  49.   x2:=x+round((r2+2)*cos(u+a+pi/4));
  50.   y2:=y-round((r2+2)*sin(u+a+pi/4));
  51.   x3:=x+round((r1-5)*cos(u+a));
  52.   y3:=y-round((r1-5)*sin(u+a));
  53.   line(x1,y1,x3,y3);
  54.   line(x2,y2,x3,y3);
  55.   circle(x,y,r2+2);
  56.   floodfill(x+round((r2+10)*cos(u+a)),y-round((r2+10)*sin(u+a)),cl);
  57.   a:=a+2*pi/3;
  58.  end;
  59. end;
  60. {основная программа}
  61. var xc,yc:integer;
  62.     v:Vent;
  63.     c:char;
  64. begin
  65. initgraph(xc,yc,'');
  66. xc:=getmaxX div 2;
  67. yc:=getmaxY div 2;
  68. v.init(xc,yc,100,30);
  69. v.lop;
  70. repeat
  71. if keypressed then
  72.  begin
  73.   c:=readkey;
  74.   case c of
  75.   '1': repeat
  76.         delay(50);
  77.         v.new_color(7);
  78.         v.lop;
  79.         v.new_angle;
  80.         v.new_color(8);
  81.         v.lop;
  82.         if keypressed then c:=readkey;
  83.        until c in ['2',#27];
  84.   '2':v.lop;
  85.   #27:exit;
  86.   end;
  87.  end;
  88. until c=#27;
  89. end.

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

  1. В начале кода подключаются необходимые библиотеки graph и crt.
  2. Затем определяется тип Vent с полями x, y, r1, r2, cl: integer; u: real;
  3. Определены четыре процедуры: init, lop, new_color, new_angle.
  4. В процедуре init рисуется корпус вентилятора с помощью функции fillellipse и устанавливается угол поворота лопастей u = π/2.
  5. В процедуре lop рисуются лопасти вентилятора с помощью функции setfillstyle, функции fillellipse и функции outtextXY.
  6. В процедурах new_color и new_angle меняется цвет или угол поворота лопастей соответственно.
  7. В основной программе создается объект v типа Vent, рисуется его корпус, затем выполняется цикл, в котором при нажатии клавиши 1 меняется цвет лопастей, рисуются лопасти, меняется угол поворота, снова рисуются лопасти, пока не будет нажата клавиша 2.
  8. В конце программы закрывается графический интерфейс.

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


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

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

8   голосов , оценка 4.125 из 5

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

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

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