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

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

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

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

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

textual
Листинг программы
uses graph,crt;
type Vent=object
          x,y,r1,r2,cl:integer;{поля: координаты центра вентилятора,
                                радиусы, цвет лопастей}
          u:real; {угол поворота лопастей}
          procedure init(ax,ay,ar1,ar2:integer);{создание объекта,
                                                 рисование корпуса}
          procedure lop;{рисование лопастей}
          procedure new_color(acl:integer);{смена цвета лопастей}
          procedure new_angle;{смена угла поворота лопастей}
          end;
procedure Vent.init(ax,ay,ar1,ar2:integer);
begin
x:=ax;
y:=ay;
r1:=ar1;
r2:=ar2;
cl:=8;
u:=pi/2;
setcolor(7);
setfillstyle(1,7);
fillellipse(x,y,r1,r1);
setcolor(14);
setfillstyle(1,14);
fillellipse(x,y,r2,r2);
setcolor(15);
outtextXY(x-90,10,'1-pusk 2-stop esc-vyhod');
end;
procedure Vent.new_color(acl:integer);
begin
cl:=acl;
end;
procedure Vent.new_angle;
begin
u:=u-0.5;
end;
procedure Vent.lop;
var a:real;
    i:byte;
    x1,y1,x2,y2,x3,y3:integer;
begin
setcolor(cl);
setfillstyle(1,cl);
a:=0;
for i:=1 to 3 do
 begin
  x1:=x+round((r2+2)*cos(u+a-pi/4));
  y1:=y-round((r2+2)*sin(u+a-pi/4));
  x2:=x+round((r2+2)*cos(u+a+pi/4));
  y2:=y-round((r2+2)*sin(u+a+pi/4));
  x3:=x+round((r1-5)*cos(u+a));
  y3:=y-round((r1-5)*sin(u+a));
  line(x1,y1,x3,y3);
  line(x2,y2,x3,y3);
  circle(x,y,r2+2);
  floodfill(x+round((r2+10)*cos(u+a)),y-round((r2+10)*sin(u+a)),cl);
  a:=a+2*pi/3;
 end;
end;
{основная программа}
var xc,yc:integer;
    v:Vent;
    c:char;
begin
initgraph(xc,yc,'');
xc:=getmaxX div 2;
yc:=getmaxY div 2;
v.init(xc,yc,100,30);
v.lop;
repeat
if keypressed then
 begin
  c:=readkey;
  case c of
  '1': repeat
        delay(50);
        v.new_color(7);
        v.lop;
        v.new_angle;
        v.new_color(8);
        v.lop;
        if keypressed then c:=readkey;
       until c in ['2',#27];
  '2':v.lop;
  #27:exit;
  end;
 end;
until c=#27;
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
Похожие ответы