fuss.PAS

{* Заполнение стакана водой *}

Unit FUSS;
Interface
Implementation
Begin
 writeln('В графическом режиме изображается заполнение водой стакана из бутылки
'
);
End.

Program FIP;

Uses fuss.pas; {* Эту строку можно удалить *}
Uses GRAPH, crt; {* Вызов внешних функций *}
label 1;
Var {* Объявление переменных *}
  GD : INTEGER;
  GM : INTEGER;
  X  : INTEGER;
  Y  : INTEGER;
  I  : INTEGER;
  K  : INTEGER;
  t  : INTEGER;
  h  : INTEGER;
  m  : INTEGER;
  s  : Array[1..30] Of integer;
  d  : Array[1..30] Of integer;
Begin
  clrscr; {* Очистка экрана *}
  gd := detect;
  initgraph(gd, gm, '');
  s[1] := 466;
  d[1] := 400 * 5;
  s[2] := 294;
  d[2] := 400 * 5;
  d[3] := 30 * 5;
  s[4] := 294;
  d[4] := 400 * 5;
  s[5] := 466;
  d[5] := 400 * 5;
  d[6] := 30 * 5;
  s[7] := 466;
  d[7] := 1000 * 5;
  s[8] := 294;
  d[8] := 400 * 5;
  d[9] := 30 * 5;
  s[10] := 294;
  d[10] := 400 * 5;
  s[11] := 466;
  d[11] := 400 * 5;
  d[12] := 30 * 5;
  s[13] := 466;
  d[13] := 400 * 5;
  s[14] := 294;
  d[14] := 400 * 5;
  s[15] := 311;
  d[15] := 400 * 5;
  s[16] := 294;
  d[16] := 400 * 5;
  d[17] := 30 * 5;
  s[18] := 294;
  d[18] := 400 * 5;
  s[19] := 262;
  d[19] := 400 * 5;
  d[20] := 30 * 5;
  s[21] := 262;
  d[21] := 400 * 5;
  s[22] := 440;
  d[22] := 400 * 5;
  d[23] := 30 * 5;
  s[24] := 440;
  d[24] := 400 * 5;
  s[25] := 440;
  d[25] := 400 * 5;
  d[26] := 30 * 5;
  setcolor(15); {стакан}
  ellipse(140, 330, 0, 360, 68, 10);
  ellipse(140, 430, 180, 360, 35, 10);
  line(72, 330, 105, 430);
  line(208, 330, 175, 430);
  line(140, 340, 140, 440);
  line(102, 338, 123, 438);
  line(178, 338, 157, 438); {бутылка}
  ellipse(500, 400, 180, 360, 70, 25);
  ellipse(500, 200, 180, 360, 70, 25);
  ellipse(530, 200, 0, 80, 40, 30);
  ellipse(470, 200, 100, 180, 40, 30);
  ellipse(500, 170, 180, 360, 37, 10);
  ellipse(500, 30, 0, 360, 30, 10);
  ellipse(500, 30, 0, 360, 20, 5);
  ellipse(500, 40, 180, 360, 30, 10);
  ellipse(500, 250, 180, 360, 70, 25);
  line(530, 30, 530, 40);
  line(470, 30, 470, 40);
  line(570, 200, 570, 400);
  line(430, 200, 430, 400);
  setcolor(14);
  line(568, 259, 568, 400);
  line(432, 259, 432, 400);
  ellipse(500, 398, 180, 360, 68, 25);
  ellipse(500, 255, 180, 360, 68, 25);
  setcolor(15);
  setfillstyle(11, 15);
  floodfill(500, 300, 14);
  line(537, 170, 520, 100);
  line(463, 170, 480, 100);
  line(520, 100, 520, 50);
  line(480, 100, 480, 50);
  delay(4000);
  setcolor(0);
  setfillstyle(11, 0);
  floodfill(500, 300, 14);
  line(568, 259, 568, 400);
  line(432, 259, 432, 400);
  ellipse(500, 398, 180, 360, 68, 25);
  ellipse(500, 255, 180, 360, 68, 25); {бутылка стерлась}
  setcolor(0);
  ellipse(500, 400, 180, 360, 70, 25);
  ellipse(500, 200, 180, 360, 70, 25);
  ellipse(530, 200, 0, 80, 40, 30);
  ellipse(470, 200, 100, 180, 40, 30);
  ellipse(500, 170, 180, 360, 37, 10);
  ellipse(500, 250, 180, 360, 70, 25);
  ellipse(500, 30, 0, 360, 30, 10);
  ellipse(500, 30, 0, 360, 20, 5);
  ellipse(500, 40, 180, 360, 30, 10);
  line(530, 30, 530, 40);
  line(470, 30, 470, 40);
  line(570, 200, 570, 400);
  line(430, 200, 430, 400);
  line(537, 170, 520, 100);
  line(463, 170, 480, 100);
  line(520, 100, 520, 50);
  line(480, 100, 480, 50);
  delay(500);
  setcolor(15); {бутылка 1 }
  ellipse(500, 100, 270, 90, 25, 70);
  ellipse(300, 100, 270, 90, 25, 70);
  line(500, 170, 300, 170);
  line(500, 30, 300, 30);
  ellipse(305, 130, 190, 260, 30, 40);
  ellipse(305, 70, 100, 170, 30, 40);
  ellipse(275, 100, 270, 90, 10, 37);
  line(275, 65, 205, 82);
  line(154, 115, 525, 115);
  line(276, 136, 205, 117);
  line(133, 115, 140, 115);
  line(205, 82, 155, 82);
  line(210, 118, 154, 118);
  setfillstyle(11, 15);
  floodfill(400, 120, 15);
  floodfill(300, 120, 15);
  ellipse(136, 100, 0, 360, 10, 30);
  ellipse(136, 100, 0, 360, 5, 20);
  ellipse(146, 100, 270, 90, 10, 30);
  line(136, 130, 146, 130);
  line(136, 70, 146, 70);
  floodfill(280, 120, 15);
  floodfill(133, 117, 15);
  delay(9000);
  For i := 115 To 440 Do {* Цикл для i => [115 .. 440] *}
  Begin
    putpixel(trunc(133 + 4 * sin(i / 30)), i, 15);
    putpixel(trunc(140 + 4 * sin(i / 30)), i, 15);
    delay(50);
  End;
  m := 430;
  t := 34;
  For i := 1 To 26 Do {* Увеличиваем i от 1 до 26 с шагом 1 *}
  Begin
    If (i = 3) Or (i = 6) Or (i = 9) Or (i = 12) Or (i = 17) Or (i = 20) Or (i = 23) Or (i = 26) Then
    Begin
      nosound;
      Goto 1;
    End;
    sound(s[i]);
    1 : ellipse(140, m, 180, 360, t, 10);
    t := t + 1;
    m := m - 3;
    delay(d[i]);
  End;
  readln; {* Ждем нажатия Enter *}
  closegraph;
End.