Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Создание иллюзии движения⇐ ПредыдущаяСтр 14 из 14 Создать видимость движения изображения на экране можно несколькими способами. Рассмотрим два из них. I способ. Имитация движения объекта на экране за счет многократного выполнения программой набора действий: нарисовать – пауза – стереть (нарисовать в том же месте цветом фона) – изменить координаты положения рисунка. program Model_At; II способ. Иллюзия движения создается при помощи специальных процедур и функций.
Упражнение 2. Изучить программу, которая рисует звездное небо и перемещает на его фоне рисунок НЛО. program NLO;
Пример. Рисование сердца на экране: program gr; Пример. НЛО.
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.
|