- •1. Этапы создания программного обеспечения
- •1.1. Постановка задачи
- •1.2. Анализ, формальная постановка и выбор метода решения
- •1.3. Проектирование
- •8.1. Управление экраном в текстовом режиме.
- •8.2. Управление клавиатурой
- •8.3. Управление динамиком
- •8.5. Управление экраном в графическом режиме
- •8.7. Практикум. Создание движущихся изображений
- •Примеры Пример 8.7. Программа рисует человечка, делающего утреннюю зарядку.
- •Пример 8.10. Программа изображает планету, вращающуюся вокруг Солнца на фоне мерцающих звезд и расходящейся галактики.
- •Демонстрация
- •Создание иллюзии движения
Создание иллюзии движения
Создать видимость движения изображения на экране можно несколькими способами. Рассмотрим два из них.
I способ. Имитация движения объекта на экране за счет многократного выполнения программой набора действий: нарисовать – пауза – стереть (нарисовать в том же месте цветом фона) – изменить координаты положения рисунка. Перед началом составления программы надо продумать описание «двигающегося» объекта, характер изменения координат, определяющих текущее положение объекта, диапазон изменения и шаг. Упражнение 1. Изучить текст программы, которая рисует модель атома. program Model_At; uses Crt, Graph; const Ra=100; {радиус атома} Rc=10; {радиус ядра} Re=4; {радиус электрона} k=0.5; {коэффициент сжатия орбит электронов} Dr=30; {параметр изменения координат электрона} Step1=0.2; {шаг изменения положения электрона} Step=100; {время задержки – скорость движения электронов} var cx, cy, y, y1, y2, x, x1, x2, x3,y3:integer; I, I1, I2, I3: real; gd, gm: integer; begin clrscr; gd:=detect; initgraph(gd, gm, ‘путь к драйверу’); SetTextStyle(0, 0, 2); OutTextXY(200, 30, ‘Модель атома’); cx:=GetMaxX div 2; {определить центр экрана- положение ядра} cy:=GetMaxY div 2; PieSlice(cx, cy, 0, 360, Rc);{нарисовать ядро атома} SetColor(Red); SetLineStyle(0, 0, 3); Line(cx-7, cy, cx+7, cy); Line(cx, cy-5, cx, cy+5); SetLineStyle(0,0,1); SetFillStyle(1,1); I:=Pi/4; {задать начальное положение 4 электронов} I1:= - Pi/4; I2:= - Pi/2; I3:= Pi/2; SetTextStyle(0, 0, 1); SetColor(jellow); OutTextXY (180, 420,’Для отмены нажмите любую клавишу’); While not KeyPressed do {повторять, пока не нажата любая клавиша } begin {определить координаты электронов} x:=Round (Ra*cos(I)) +cx; Y:= Round(k+Ra*sin(I)) +cy; x1:= Round((Ra+Dr)*cos(I1)) +cx; y1:= Round (k*(Ra+Dr)*sin(I1)) +cy; x2:= Round((Ra-Dr)*cos(I2)) +cx; y2:= Round (k*(Ra-Dr)*sin(I2)) +cy; x3:= Round((Ra-Dr)*cos(I3)*2.3) +cx; y3:= Round (k*(Ra-Dr)*sin(I3)*2.3) +cy;{установить синий цвет и нарисовать электроны} SetColor(1); Circle(x, y, Re); PutPixel(x, y, 2); Circle(x1, y1, Re); PutPixel(x1, y1, 2); Circle(x2, y2, Re); PutPixel(x2, y2, 2); Circle(x3, y3, Re); PutPixel(x3, y3, 2); Delay(Step); {нарисовать электроны цветом фона} SetColor(0); Circle(x, y, Re); PutPixel(x, y, 2); Circle(x1, y1, Re); PutPixel(x1, y1, 2); Circle(x2, y2, Re); PutPixel(x2, y2, 2); Circle(x3, y3, Re); PutPixel(x3, y3, 2); {задать изменение положения электронов} I:=I + Step1; I1:=I1 – Step1; I2:=I2 + Step1; I3:=I3 + Step1; end; {конец цикла} CloseGraph; end.
II способ. Иллюзия движения создается при помощи специальных процедур и функций. Функция ImageSize (x1,y1,x2,y2:integer):word возвращает размер памяти в байтах, необходимый для размещения прямоугольного фрагмента изображения, где x1,y1 – координаты левого верхнего и x2,y2 – правого нижнего углов фрагмента изображения. Процедура GetImage (x1,y1,x2,y2:integer,var Buf) помещает в память копию прямоугольного фрагмента изображения, где x1,..,y2 – координаты углов фрагмента изображения, Buf - специальная переменная, куда будет помещена копия видеопамяти с фрагментом изображения. Buf должна быть не меньше значения, возвращаемого функцией ImageSize с теми же координатами. Процедура PutImage (x1,y1,x2,y2:integer,var Buf, Mode:word) выводит в заданное место экрана копию фрагмента изображения, ранее помещенную в память процедурой GetImage. X,Y – координаты левого верхнего угла того места на экране, куда будет скопирован фрагмент изображения; Buf - специальная переменная, откуда берется изображение, Mode – способ копирования. Координаты правого нижнего угла не указываются, так как они полностью определяются размерами выводимой на экран копии изображения. Координаты левого верхнего угла могут быть любыми, лишь бы только копия уместилась в пределах экрана (если копия не размещается на экране, то она не выводится , и экран остается без изменений). Параметр Mode определяет способ взаимодействия размещаемой с уже имеющимся на экране изображением ( табл. 7)
Константа |
Значение |
Операция |
Пояснения |
NormalPut |
0 |
Замена существующего на копию |
Стирает часть экрана и на это место помещает копию |
XorPut |
1 |
Исключительное или |
Рисует сохраненный образ или стирает ранее нарисованный, сохраняя фон |
OrPut |
2 |
Объединительное или |
Накладывает сохраненный образ на существующий |
AndPut |
3 |
Логическое и |
Объединяет сохраненный образ и уже существующий на экране |
NotPut |
4 |
Инверсия изображения |
То же самое, что и 0, только копия выводится в инверсном виде |
Упражнение 2. Изучить программу, которая рисует звездное небо и перемещает на его фоне рисунок НЛО.
program NLO; uses crt, graph; const k=20; Pause=50; var gd, gm, xmin, xm, ymin, ym, x, y, tx, ty, rx, ry, size, i, dx, dy, width, height: integer; sauser:Pointer; begin Randomize; gd:= detect; initgraph (gd, gm, ‘путь к драйверу’); SetTextStyle (0, 0, 2); OutTextXY (50, 10, ‘Демонстрация движения НЛО’); {Рисуем НЛО} x:=R*5; y:=R*2; xm:=GetmaxX-5; ym:=GetmaxY-25; Ellipse(x, y, 0, 360, R, R div 3+2); Ellipse(x, y-4, 190, 357, R, R div 3); Line(x + 7, y - 6, x + 10, y - 12); Line(x - 7, y - 6, x + 10, y - 12); Circle(x + 10, y - 10, 2); Circle(x - 10, y - 10, 2); FloodFill(x+1, y+4, White); {определяем габариты НЛО и помещаем в специальную динамическую переменную} Tx:= x-R; Ty:=y-14; Rx:=x+R; Ry:=y+R div3 +3; Width:=Rx-Tx+1; Size:=ImageSize(Tx, Ty, Rx, Ry); GetMem(sauser, Size); GetImage(Tx, Ty, Rx, Ry, sauser^); {стираем построенное изображение} PutImage(Tx, Ty, sauser^, XorPut); {рисуем звездное небо} SetStyle (1, blue); {установить стиль и цвет закраски голубое небо} SetColor (White); {начертить прямоугольник и открыть окно} Rectangle (xmin, ymin, GetmaxX, GetmaxY); SetViewPort (xmin, ymin, GetmaxX, GetmaxY, ClipOn); FloodFill (xmin+1, ymin+1, White); For i:=1 to 500 do {нарисовать 500 звезд белого цвета} PutPixel(Random(GetmaxX), Random(GetmaxY- ymin), 15); {задаем начальное положение НЛО} x:=xm div 3 – xmin; y:=ym div 3 – ymin; dx:=6; dy:=6; Repeat {цикл: повторять, пока не нажата любая клавиша} PutImage (x, y, sauser^, XorPut); {изображаем объект} Delay (Pause);{задержка} PutImage(x, y, sauser^, XorPut); {после паузы стираем объект} {перемещаем объект} If (x<xmin) Or (y<ymin) Or (x+Width +1> xm) Or (y+Height +1> ym) Then begin {если объект смещается влево-вверх за границы окна, изменить координаты так, чтобы он оставался в окне} If (x- Dx< xmin) then x:= xmin else x := x- Dx; If (y- Dy< ymin) then y:= ymin else y := y- Dy; Dx:= GetmaxX div 10 - Random(GetmaxX div 4); Dy:= GetmaxY div 10 - Random(GetmaxY div 4); end else begin {если объект смещается вправо-вниз за границы окна, изменить координаты так, чтобы он оставался в окне} If (x + Dx< xm) then x:= x + Dx else x:= Random(GetmaxX) - Random(GetmaxX div 4); If (y + Dy< ym) then y:= y + Dy else y:= Random(GetmaxY) - Random(GetmaxY div 3); end; until KeyPressed; {завершить, как только будет нажата клавиша} FreeMem (sauser, Size); Closegraph; end; end.
Пример. Рисование сердца на экране:
program gr; uses crt,graph; var driver,mode,error:integer; l,n,m,x,y,r:integer; begin driver:=detect; initgraph(driver,mode,”); error:=graphresult; if error<>grOk then begin writeln(’Ошибка графики: ‘,graphErrorMsg(error)); writeln(’Программа аварийно завершила работу…’); halt(1); end; m:=1;l:=1;x:=1;y:=1;r:=1;n:=1; repeat x:=1;y:=1;r:=1;l:=1; repeat begin setcolor(cyan); arc(170-x,150,0,180,20+r); arc(210+x,150,0,180,20+r); line(150-2*x,150,190,200+y); line(230+2*x,150,190,200+y); floodfill(149,150,cyan); x:=x+1;y:=y+1;r:=r+1; delay(20); clearviewport; l:=l+1; end; until l=20; x:=1;y:=1;r:=1;m:=1; repeat setcolor(cyan); arc(150+x,150,0,180,40-r); arc(230-x,150,0,180,40-r); line(110+2*x,150,190,220-y); line(270-2*x,150,190,220-y); floodfill(149,150,cyan); x:=x+1;y:=y+1;r:=r+1;m:=m+1; delay(20); clearviewport; until m=20; n:=n+1; until n=20; closegraph; end.
Пример. НЛО.
Program nlo;
uses crt, graph;
label loop;
const
r=20;
pause=10000;
col=white;
var driver,regim,error:integer;
i:integer;
sauser:pointer;
size:integer;
xm,ym,x,y,lx,ly,rx,ry,dx,dy,width,height:integer;
begin
clrscr;
driver:=detect;
InitGraph(driver,regim,'');
setgraphmode(0);
x:=r*5; y:=r*2;
xm:=getmaxx; ym:=getmaxy;
ellipse(x,y,0,360,r,r div 3 +2);
ellipse(x,y-4,190,357,r,r div 3);
line(x+7,y-6,x+10,y-12);
line(x-7,y-6,x-10,y-12);
circle(x+10,y-12,2);
circle(x-10,y-12,2);
setfillstyle(solidfill,col);
floodfill(x+1,y+4,col);
lx:=x-r-1; ly:=y-14;
rx:=x+r+1; ry:=y+r div 3 +3;
width:=rx-lx+1;
height:=ry-ly+1;
size:=imagesize(lx,ly,rx,ry);
getmem(sauser,size);
getimage(lx,ly,rx,ry,sauser^);
putimage(lx,ly,sauser^,xorput);
for i:=1 to 1000 do
putpixel(random(xm),random(ym),random(succ(getmaxcolor)));
x:=xm div 2; y:=ym div 2;
dx:=getmaxx div 100 -random(getmaxx div 50);
dy:=getmaxy div 40 -random(getmaxy div 20);
repeat
putimage(x,y,sauser^,xorput);
delay(pause);
putimage(x,y,sauser^,xorput);
loop: x:=x+dx; y:=y+dy;
delay(pause);
if (x<0) or (x+width+1>xm) or (y<0) or (y+height+1>ym) then
begin
x:=x-dx;
dx:=getmaxx div 10 -random(getmaxx div 5);
y:=y-dy;
dy:=getmaxy div 40 -random(getmaxy div 20);
goto loop;
end;
until keypressed;
{readln;}
CloseGraph;
end.
Пример. Летящее красное ядро.
Program yadro;
uses crt, graph;
var driver,regim,error:integer;
i:integer;
p:pointer;
size:word;
begin
clrscr;
driver:=detect;
InitGraph(driver,regim,'');
setcolor(4);
for i:=1 to 10 do
begin
circle(40,50,i);
end;
size:=imagesize(29,39,51,61);
getmem(p,size);
getimage(29,39,51,61,p^);
readln;
cleardevice;
for i:=1 to 400 do
begin
putimage(29+i,39+i,p^,normalput);
delay(1000);
end;
readln;
CloseGraph;
end.
Пример. Бьющееся сердце.
Program heart;
uses crt, graph;
const
sx=1.6; (* коэффициент сжатия по х *)
sy=1.3; (* по y *)
dx=250; (* смещение по х *)
dy=100; (* смещение по y *)
n1=79; (* кол-во точек, описывающих несжатое сердце *)
a1:array[1..n1*2] of word=(22,38, 20,40, 19,44, 17,48, 16,52,
17,55, 18,60, 20,64, 21,67, 23,70,
27,74, 30,77, 34,80, 37,83, 42,87,
48,90, 50,91, 52,92, 56,93, 59,94,
62,93, 65,92, 66,92, 68,90, 70,88,
71,86, 72,84, 73,81, 74,78, 75,75,
75,72, 76,68, 76,65, 76,61, 76,57,
75,53, 73,49, 75,49, 74,42, 71,38,
70,35, 69,32, 65,28, 67,25, 70,24,
73,23, 74,21, 77,20, 80,19, 83,19,
85,19, 87,20, 88,20, 91,21, 94,23,
96,25, 98,18, 94,15, 86,12, 87,11,
75,12, 71,14, 65,16, 60,20, 56,25,
50,27, 44,29, 40,30, 34,27, 30,25,
25,24, 20,24, 15,25, 8,27, 3,29,
5,40, 10,38, 14,37, 22,38);
n2=64; (* кол-во точек, описывающих сжатое сердце *)
a2:array[1..n2*2] of word=(22,38, 22,41, 23,47, 25,54, 26,59,
28,63, 30,67, 34,72, 36,76, 40,80,
44,84, 50,88, 55,91, 59,92, 64,91,
67,89, 69,87, 71,83, 72,79, 72,75,
72,70, 72,65, 72,60, 70,52, 69,45,
66,36, 64,30, 65,28, 67,25, 70,24,
73,23, 74,21, 77,20, 80,19, 83,19,
85,19, 87,20, 88,20, 91,21, 94,23,
96,25, 98,18, 94,15, 86,12, 87,11,
75,12, 71,14, 65,16, 60,20, 56,25,
50,27, 44,29, 40,30, 34,27, 30,25,
25,24, 20,24, 15,25, 8,27, 3,29,
5,40, 10,38, 14,37, 22,38);
n3=5; (* координаты пузырьков крови *)
a3:array[1..n3*2] of word=(65,23, 71,17, 77,17, 85,17, 95,20);
var driver,regim,error:integer;
i,k:word;
procedure bum; (* имитация стука сердца *)
begin
sound(100);
delay(4);
sound(20);
delay(7);
nosound;
end;
procedure bulbul; (* имитация движения крови *)
var i,k:word;
begin
for k:=1 downto 0 do
begin
setcolor(k);
for i:=1 to 5 do
begin
circle(round(a3[i*2-1]*sx),round(a3[i*2]*sy),3);
delay(60000);
end;
end;
end;
procedure draw1; (* рисуем несжатое сердце *)
begin
setcolor(1);
moveto(round(a1[1]*sx),round(a1[2]*sy)); (* устанавливаем указатель на первую точку сердца *)
i:=3;
while i<=(n1*2) do
begin
lineto(round(a1[i]*sx),round(a1[i+1]*sy));
inc(i,2);
end;
lineto(round(a1[1]*sx),round(a1[2]*sy));
end;
procedure draw2;
begin
setcolor(0);
moveto(round(a1[1]*sx),round(a1[2]*sy));
i:=3;
while i<=(n1*2) do
begin
lineto(round(a1[i]*sx),round(a1[i+1]*sy));
inc(i,2);
end;
setcolor(1);
moveto(round(a2[1]*sx),round(a2[2]*sy));
i:=3;
while i<=(n2*2) do
begin
lineto(round(a2[i]*sx),round(a2[i+1]*sy));
inc(i,2);
end;
bum;
bulbul;
end;
procedure draw3;
begin
setcolor(0);
moveto(round(a2[1]*sx),round(a2[2]*sy));
i:=3;
while i<=(n2*2) do
begin
lineto(round(a2[i]*sx),round(a2[i+1]*sy));
inc(i,2);
end;
setcolor(1);
moveto(round(a1[1]*sx),round(a1[2]*sy));
i:=3;
while i<=(n1*2) do
begin
lineto(round(a1[i]*sx),round(a1[i+1]*sy));
inc(i,2);
end;
end;
begin
{clrscr; }
driver:=detect;
InitGraph(driver,regim,''); (* инициализация графики *)
setviewport(dx,dy,dx+300,dy+300,true); (* устанавливаем окно просмотра *)
repeat
begin
draw1;
delay(50000);
draw2; (* рисуем сжатое сердце *)
draw3; (* стираем его и рисуем нормальное сердце *)
end;
until keypressed;
readln;
CloseGraph;
end.
Пример листинга курсовой работы.
program g1;
uses crt, graph;
const N=15000;
t: array [1..10] of integer = (480, 345, 530, 345, 530, 385, 480, 385, 480, 345);
var
driver, regim, error: integer;
i, j: integer;
p: pointer;
size: word;
l: byte;
st: string[8];
st1: string[34];
st2: string[54];
k, x1, y1, x2, y2: integer;
x, y: array[1..n] of integer;
begin
clrscr;
writeln('Tekstoyregim');
textcolor(10);
st:='ZADANIE:';
gotoXY(18,9);
for l:=1 to length(st) do
begin
write (st[l]);
sound(20);
delay(9900);
nosound;
end;
textcolor(15);
st1:='Ojivit za schet dvijenia elochky:';
gotoXY(18, 12);
for l:=1 to length(st1) do
begin
write (st1[l]);
sound(68);
delay(9999);
nosound;
end;
gotoXY(18, 14);
st2:='organizovat peremechenie vpravo s izmeneniem razmera.';
for l:=1 to length(st2) do
begin
write (st2[l]);
sound(21);
delay(9999);
nosound;
end;
readln;
driver:=detect;
Initgraph (driver, regim, 'c:\tp\bgi');
error:=graphresult;
if error <> grOk then writeln (grapherrorMSg(error))
else
begin
OuttextXY(30, 20, 'Graficheskyregim');readln;
cleardevice;
begin
x1:=0;
y1:=0;
x2:=getmaxX-2;
y2:=getmaxY-2;
rectangle(x1, y1, x2, y2);
setViewport(x1+1, y1+1, x2-1, y2-1, ClipOn);
for k:=1 to n do
begin
x[k]:=random(x2-x1);
y[k]:=random(y2-y1);
end;
for k:=1 to n do
putpixel(x[k], y[k], random(7));
setfillstyle(0, black);
bar(40, 40, 590, 438);
rectangle(40, 40, 590, 438);
BEGIN
SetColor(LightGray); Circle (390, 180, 12);
SetColor(Yellow); Arc(390, 180, 0, 180, 19);
Arc(390, 180, 0, 180, 17); Arc(390, 180, 0, 180, 15);
SetColor(LightCyan); Circle(385, 176, 2);
Circle(395, 176, 2);
SetColor(LightRed);
SetFillStyle(SolidFill, LightRed);
FillEllipse(390, 186, 5, 2);
Setcolor(lightgray);
Line(390, 192, 390, 225);
Line(390, 225, 370, 255);
Line(390, 225, 410, 255);
line(365, 200, 415, 200);
setcolor(6);
line(366, 190, 366, 210);
line(360, 190, 360, 210);
setcolor(7);
line(366, 190, 353, 190);
line(353, 190, 353, 200);
line(353, 200, 360, 195);
setcolor(6);
line(366, 210, 360, 210);
setcolor(15);
settextstyle (DefaultFont, HorizDir, 1);
OutTextXY (50, 415, 'S M A L L H E R R I N G B O N E');
setfillstyle(4, 2);
bar(80, 260, 420 , 270);
setfillstyle(4, 2);
bar(400, 420, 570 , 430);
setfillstyle (11, 14);
fillellipse(80, 120, 15, 15);
setcolor(8);
ellipse (532, 130, 0, 360, 30, 5);
ellipse (532, 170, 0, 360, 23, 4);
ellipse (532, 210, 0, 360, 18, 3);
ellipse (532, 250, 0, 360, 10, 2);
setcolor (yellow);
line(540, 300, 540, 270);
line(525, 287, 525, 270);
line(540, 270, 525, 270);
circle(80, 120, 15);
line(479, 344, 531, 344);
line(531, 344, 531, 385);
line(531, 385, 479, 385);
line(479, 385, 479, 344);
LINE(450, 320, 560, 320);
line(560, 320, 560, 410);
line(560, 410, 450, 410);
line(450, 410, 450, 320);
line(440, 328, 505, 268);
line(505, 268, 570, 328);
repeat
circle(505, 300, 10);
begin
randomize;
for i:=1 to 70 do
putpixel(random(630), random(107), random(succ(getmaxcolor)));
end;
for i:=1 to 21 do
begin
setcolor(Green);
begin
Sound(Random(2000));
Delay(Random(1000));
LINE(200+5*i, 100+5*i, 230+4*i, 130+4*i);
line(230+4*i, 130+4*i, 170+6*i, 130+4*i);
line(170+6*i, 130+4*i, 200+5*i, 100+5*i);
line(200+5*i, 130+4*i, 255+3*i, 165+3*i);
line(255+3*i, 165+3*i, 145+7*i, 165+3*i);
line(145+7*i, 165+3*i, 200+5*i, 130+4*i);
line(200+5*i, 165+3*i, 265+3*i, 220+i);
line(265+3*i, 220+i, 135+7*i, 220+i);
line(135+7*i, 220+i, 200+5*i, 165+3*i);
setcolor(6);
line(205+5*i, 220+i, 205+5*i, 250);
line(205+5*i, 250, 195+5*i, 250);
line(195+5*i, 250, 195+5*i, 220+i);
end;
DELAY(60000);
setcolor(0);
begin
LINE(200+5*i, 100+5*i, 230+4*i, 130+4*i);
line(230+4*i, 130+4*i, 170+6*i, 130+4*i);
line(170+6*i, 130+4*i, 200+5*i, 100+5*i);
line(200+5*i, 130+4*i, 255+3*i, 165+3*i);
line(255+3*i, 165+3*i, 145+7*i, 165+3*i);
line(145+7*i, 165+3*i, 200+5*i, 130+4*i);
line(200+5*i, 165+3*i, 265+3*i, 220+i);
line(265+3*i, 220+i, 135+7*i, 220+i);
line(135+7*i, 220+i, 200+5*i, 165+3*i);
setcolor (0);
line(205+5*i, 220+i, 205+5*i, 250);
line(205+5*i, 250, 195+5*i, 250);
line(195+5*i, 250, 195+5*i, 220+i);
end;
END;
j:=i mod 12;
for i:=0 to j do
begin
setfillstyle(j, random(13));
fillpoly(5, t);
inc(i);
delay(500);
end;
for i:=21 downto 1 do
begin
setcolor(Green);
begin
LINE(200+5*i, 100+5*i, 230+4*i, 130+4*i);
line(230+4*i, 130+4*i, 170+6*i, 130+4*i);
line(170+6*i, 130+4*i, 200+5*i, 100+5*i);
line(200+5*i, 130+4*i, 255+3*i, 165+3*i);
line(255+3*i, 165+3*i, 145+7*i, 165+3*i);
line(145+7*i, 165+3*i, 200+5*i, 130+4*i);
line(200+5*i, 165+3*i, 265+3*i, 220+i);
line(265+3*i, 220+i, 135+7*i, 220+i);
line(135+7*i, 220+i, 200+5*i, 165+3*i);
setcolor (6);
line(205+5*i, 220+i, 205+5*i, 250);
line(205+5*i, 250, 195+5*i, 250);
line(195+5*i, 250, 195+5*i, 220+i);
end;
DELAY(60000);
setcolor(0);
begin
LINE(200+5*i, 100+5*i, 230+4*i, 130+4*i);
line(230+4*i, 130+4*i, 170+6*i, 130+4*i);
line(170+6*i, 130+4*i, 200+5*i, 100+5*i);
line(200+5*i, 130+4*i, 255+3*i, 165+3*i);
line(255+3*i, 165+3*i, 145+7*i, 165+3*i);
line(145+7*i, 165+3*i, 200+5*i, 130+4*i);
line(200+5*i, 165+3*i, 265+3*i, 220+i);
line(265+3*i, 220+i, 135+7*i, 220+i);
line(135+7*i, 220+i, 200+5*i, 165+3*i);
setcolor(0);
line(205+5*i, 220+i, 205+5*i, 250);
line(205+5*i, 250, 195+5*i, 250);
line(195+5*i, 250, 195+5*i, 220+i);
end;
END;
j:=i mod 12;
for i:=0 to j do
begin
setfillstyle(j, random(13));
fillpoly(5, t);
inc(i);
delay(500);
end;
nosound;
until keypressed;
end;end;
readln;
closegraph;
RestoreCrtMode;
writeln('Tekstoyregim');
repeat
textbackground(9);
textcolor(10);
gotoXY (27, 7);
writeln('* * * * * * * * * * * * * * * *'); gotoXY(27, 8);
writeln('* *'); gotoXY(27, 9);
writeln('* Vipolnila: *'); gotoXY(27, 10);
writeln('* *'); gotoXY(27, 11);
writeln('* Sarafan Ekaterina *'); gotoXY(27, 12);
writeln('* *'); gotoXY(27, 13);
writeln('* Andreevna *'); gotoXY(27, 14);
writeln('* *'); gotoXY(27, 15);
writeln('* stydentka 1 kyrsa *'); gotoXY(27, 16);
writeln('* *'); gotoXY(27, 17);
writeln('* gryppi BM-71 *'); gotoXY(27, 18);
writeln('* *'); gotoXY(27, 19);
writeln('* * * * * * * * * * * * * * * *');
sound(540);delay(30000);nosound;
sound(480);delay(10000);nosound;
sound(420);delay(20000);nosound;
sound(480);delay(20000);nosound;
sound(540);delay(10000);nosound;delay(10000);
sound(540);delay(10000);nosound;delay(10000);
sound(540);delay(30000);nosound;
sound(480);delay(10000);nosound;delay(10000);
sound(480);delay(10000);nosound;delay(10000);
sound(480);delay(30000);nosound;
sound(540);delay(10000);nosound;delay(10000);
sound(660);delay(10000);nosound;delay(10000);
sound(660);delay(30000);nosound;
until keypressed;
readln;
end;
end.
