|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
informatica - graful | ||||||
|
||||||
1 Introducere c3o13og Afisarea informatiilor pe ecranul unui calculator se realizeaza prin intermediul placii grafice si a driver-ului grafic asociat acesteia Placa grafica sau adaptorul de ecran este componenta hard a calculatorului, care asigura gestiunea memoriei ecran si controlul monitorului video. Driverul grafic este componenta software care comanda placa grafica Memoria ecran apartine placii grafice, ea pastreaza informatiile care se afiseaza „instantaneu” pe ecran ( in realitate imaginea de pe ecran este generata de aproximativ 50 de ori pe secunda). Memoria ecran poate fi adresata ca o memorie obisnuita. Placa grafica trateaza ecranul in doua moduri: text si grafic. In modul text, fiecare caracter care urmeaza sa apara pe ecran este pastrat in memoria ecran pe doi octeti: 1 primul contine codul Ascii al caracterului; 2 al doilea cuprinde caracteristicile caracterului : culoare, iluminare, culoarea fondului, clipire. In modul grafic, memoria ecran cuprinde pentru fiecare pixel (element de imagine) de pe ecran un cod reprezentat pe biti, prin care se determina culoarea pixelului. Datorita acestui mod de codificare, memoria ecran poate cuprinde imaginea codificata a mai multor ecrane. Zona din memoria ecran necesara pentru memorarea unui ecran se numeste pagina video. In Turbo Pascal, prin subprogramele unit-ului CRT ecranul este tratat in modul text, iar prin subprogramele unitului Graph el este tratat in modul grafic. 1 Initializarea modului grafic In Turbo Pascal segmentele de dreapta se pot trasa da linii de diverse
tipuri si grosimi; caracteristicile liniei se fixeaza prin apelul procedurii
SetLineStyle. Apelul are forma: 9- Procedura FloodFill-; deseneaza, cu modelul si culoarea curenta, o zona definita printr-un punct interior (x, y) si culoarea frontierei. Se determina prin: FloodFill(x, y, culoare_margine). Parametrii sunt expresii: x, y de tip INTEGER si culoare_margine de tip WORD. 1 Afisarea textelor, ferestre de afisare Pentru afisarea textelor trebuie alese atributele caracterelor cu care se va face afisarea si, apoi, apelate procedurile de afisare. Pentru a stabili atribute asociate textelor se utilizeaza procedurile urmatoare: 1 Procedura SetTextStyle(tip_caractere, directie, marime) Toti parametrii sunt de tip WORD. Parametrul tip_caractere determina forma caracterelor cu care se va face afisarea; parametrul directie determina directia de afisare(el se poate exprima prin constantele: HorizDir, VertDir); parametrul marime determina marimea caracterelor care se vor afisa. Caracterele tipului DefaultFont sunt reprezentate in unit-ul Graph prin cate 8 octeti, in ordinea valorilor codului lor ASCII. Cei 8x8 biti asociati unui caracter, considerati ca o matrice de 8x8, definesc forma caracterului. Sirul format din toate grupurile de 8 octeti asociati caracterelor formeaza fontul raster. In celelalte tipuri de caractere sunt afisabile numai caracterele cu coduri ASCII intre 32 si 127. Fonturile corespunzatoare lor se numesc fonturi vectoriale. Din cauza modului diferit de reprezentare interna, cand se maresc, caracterele fonturilor vectoriale arata mult mai bine decat cele ale fontului raster. 2 Procedura SetTextJustify(orizontal, vertical). Parametrii sunt de tip WORD. Afisarea propriu-zisa a textelor se realizeaza cu ajutorul procedurilor OutTextXY si OutText. 1-Procedure OutText -; se apeleaza prin: Outtext(sir). Parametrul sir este o expresie de tip STRING. 2-Procedura OutTextXY -; se apeleaza prin: OutTextXY(x, y, sir). Parametrii x, y sunt de tip Integer. O fereastra de afisare este o zona dreptunghiulara de pe ecran in care deseneaza procedurile apelate dupa executia procedurii SetViewPort. Procedura SetViewPort deschide o fereastra care ramane activa pana la deschiderea unei noi ferestre. Procedura se apeleaza prin: SetViewPort(x1, y1, x2, y2, taiere). Parametrii x1, y1, x2, y2 sunt de tip INTEGER si definesc coordonatele stanga-sus si dreapta-jos ale ferestrei. Parametrul taiere este o expresie booleana; el se poate exprima prin constantele predefinite in unit-ul Graph: ClipOn -; valoarea True ClipOff -; valoarea False Daca taiere = ClipOn, procedurile apelate dupa procedura SetViewPort vor desena numai in fereastra, desenul exterior ferestrei ramanand neschimbat. Daca taiere = ClipOff, taierea nu se realizeaza si se va desena si in afara ferestrei. 1 Tehnici de animatie Orice program de animatie trebuie sa cuprinda urmatorii pasi: 1 afisarea corpului sau figurii; 2 o pauza care sa permita perceptia imaginii afisate; 3 stergerea imaginii afisate la pasul 1; 4 modificarea pozitiei corpului sau figurii care se afiseaza si revenirea la pasul 1. In Turbo Pascal exista urmatoarele tehnici simple de animatie: ? Pentru stergerea figurii se redeseneaza corpul(figura) cu culoarea fondului. ? Se apeleaza procedura SetWriteMode(XorPut) care fixeaza modul de scriere pe ecran pe Xor ( sau exclusiv). Acest mod permite ca la primul apel
al uneia din procedurile Line, LineTo, LineRel, DrawPoly, Rectangle, OutText,
OutTextXY ( numai pentru fonturile vectoriale ) sa se deseneze, iar la al doilea
apel sa se stearga desenul afisat anterior. Program Atestat_Potolica_Dragos_Florin; Var gd,gm,n,i,a,b,c,d,x,y:integer; r,t:char; dd:string; Procedure welcome; Begin Writeln; Writeln; Writeln; Writeln; Writeln; Writeln; Writeln; Writeln; Writeln; Writeln; Writeln; Writeln; Textcolor(yellow); Writeln(' PAC GAME'); Delay(1500); Textcolor(9); Write(' A'); Delay(130); Write('u'); Delay(130); Write('t'); Delay(130); Write('h'); Delay(130); Write('o'); Delay(130); Write('r'); Delay(130); Write(':'); Delay(130); Write('P'); Delay(130); Write('o'); Delay(130); Write('s'); Delay(130); Write('t'); Delay(130); Write('o'); Delay(130); Write('l'); Delay(130); Write('i'); Delay(130); Write('c'); Delay(130); Write('a'); Delay(130); Write(' '); Delay(130); Write('D'); Delay(130); Write('r'); Delay(130); Write('a'); Delay(130); Write('g'); Delay(130); Write('o'); Delay(130); Write('s'); Delay(130); Write('-'); Delay(130); Write('F'); Delay(130); Write('l'); Delay(130); Write('o'); Delay(130); Write('r'); Delay(130); Write('i'); Delay(130); Write('n'); End; Begin Repeat n:=0; Clrscr; gd:=detect; InitGraph(gd,gm,'c:\bp\bgi'); SetTextStyle(5,horizdir,4); SetColor(11); OutTextXY(60,160,'Acesta este proiectul meu de atestat'); Delay(4000); CloseGraph; Welcome; Delay(1300); a:=30; b:=30; c:=47; d:=47; gd:=detect; InitGraph(gd,gm,'c:\bp\bgi'); SetColor(yellow); OutTextXY(575,3,'Esc:exit'); OutTextXY(10,3,'t:teleportare'); MoveTo(0,0); SetColor(9); OutTextXY(250,3,'Scorul este:'); SetColor(yellow); Rectangle(0,15,639,479); SetWriteMode(xorput); Repeat n:=n+1; Randomize; Repeat x:=random(639); y:=random(479); Until (x<>0) and (y>15); SetColor(10); Line(0,150,150,150); Line(180,100,250,100); Line(180,15,180,100); Line(180,225,180,280); Line(300,500,300,350); Line(200,200,getmaxx,200); Line(0,380,130,380); Line(150,150,150,280); Line(131,330,131,430); Line(450,450,450,300); Line(180,349,380,349); Line(230,299,550,299); Line(381,318,381,400); Line(350,401,431,401); Line(551,400,551,250); Line(469,401,620,401); Line(180,318,180,349); Line(251,50,251,180); Line(230,181,310,181); Line(480,50,480,199); Line(300,100,370,100); Line(430,100,619,100); Line(620,35,620,150); Line(510,34,620,34); Line(75,151,75,279); Line(35,280,131,280); Line(150,getmaxy,150,getmaxy-4); Line(185,getmaxy,185,getmaxy-4); Line(388,15,388,19); Line(420,15,420,19); Line(0,295,4,295); Line(0,325,4,325); Line(getmaxx-4,345,getmaxx,345); Line(getmaxx-4,375,getmaxx,375); SetColor(13); OutTextXY(x,y,'_'); Repeat t:=readkey; Case t of AsusS #72:Begin Repeat If (b=16) Or ((b=151) and ( 0<a) and (a<151 )) Or ((b=101) and (162<a) and (a<251)) Or ((b=15) and (178<a) and (a<182)) Or ((b=201) and(182<a) and (a<getmaxx)) Or ((b=381) and (0<a) and (a<131)) Or ((b=281) and (132<a) and (a<151)) Or ((b=431) and (113<a) and (a<132)) Or ((b=451) and (432<a) and (a<451)) Or ((b=350) and (162<a) and (a<380)) Or ((b=300) and (212<a) and (a<550)) Or ((b=401) and (369<a) and (a<382)) Or ((b=402) and (332<a) and (a<431)) Or ((b=401) and (532<a) and (a<552)) Or ((b=402) and (451<a) and (a<620)) Or ((b=281) and (162<a) and (a<181)) Or ((b=350) and (162<a) and (a<181)) Or ((b=180) and (234<a) and (a<252)) Or ((b=182) and (212<a) and (a<310)) Or ((b=101) and (282<a) and (a<370)) Or ((b=101) and (412<a) and (a<619)) Or ((b=151) and (603<a) and (a<621)) Or ((b=35) and (492<a) and (a<620)) Or ((b=280) and (58<a) and (a<75)) Or ((b=281) and (17<a) and (a<131)) Then begin Rectangle(a,b,c,d); Delay(10); Rectangle(a,b,c,d); End Else Begin SetColor(14); Rectangle(a,b,c,d); Delay(10); SetColor(14); Rectangle(a,b,c,d); b:=b-1; d:=d-1; If (b=16)and(a>=388)and(c<=420) then Begin a:=155; c:=172; b:=getmaxy; d:=getmaxy+17; End; End; Until keypressed; End; #27:exit; AjosS #80:Begin Repeat If (d=getmaxy-1) Or ((d=15) and (a<=180) and (c>=180)) Or ((d=149) and (0<c) and (c<168)) Or ((d=99) and (180<c) and (c<268)) Or ((d=199) and (200<c) and (c<getmaxx)) Or ((d=349) and (300<=c) and (c<=317)) Or ((d=379) and (0<c) and (c<148)) Or ((d=329) and (131<=c) and (c<=148)) Or ((d=299) and (450<=c) and (c<=467)) Or ((d=348) and (179<c) and (c<398)) Or ((d=298) and (229<c) and (c<568)) Or ((d=317) and (381<=c) and (c<=398)) Or ((d=400) and (349<c) and (c<449)) Or ((d=249) and (551<=c) and (c<=568)) Or ((d=400) and (468<c) and (c<638)) Or ((d=224) and (180<=c) and (c<=197)) Or ((d=317) and (180<=c) and (c<=197)) Or ((d=49) and (251<=c) and (c<=268)) Or ((d=180) and (229<c) and (c<328)) Or ((d=49) and (480<=c) and (c<=498)) Or ((d=99) and (299<c) and (c<388)) Or ((d=99) and (429<c) and (c<637)) Or ((d=34) and (620<=c) and (c<=637)) Or ((d=33) and (509<c) and (c<638)) Or ((d=150) and (75<=c) and (c<=92)) Or ((d=279) and (35<=c) and (c<=148)) Then Begin Rectangle(a,b,c,d); Delay(10); Rectangle(a,b,c,d); End Else Begin SetColor(14); Rectangle(a,b,c,d); Delay(10); SetColor(14); Rectangle(a,b,c,d); b:=b+1; d:=d+1; If (d=getmaxy-1) and (a>=150) and (c<=186) then Begin a:=400; c:=417; b:=16; d:=33; End; End; Until keypressed; End; AstangaS #75:Begin Repeat If (a=1) Or ((a=151) and (b<=150) and (d>=151)) Or ((a=251) and (b<=100) and (d>=101)) Or ((c=198) and (b>=15) and (d<=100)) Or ((c=100) and (b>=200) and (d<=201)) Or ((c=318) and (b<=500) and (d>=350)) Or ((a=131) and (b<=380) and (d>=381)) Or ((c=168) and (b>=149) and (d<=297)) Or ((c=149) and (b>=315) and (d<=447)) Or ((c=468) and (b<=450) and (d>=300)) Or ((a=381) and (b<=349) and (d>=350)) Or ((c=399) and (b<=400) and (d>=318)) Or ((a=432) and (b<=401) and (d>=402)) Or ((c=569) and (b<=400) and (d>=250)) Or ((a=621) and (b<=401) and (d>=402)) Or ((c=198) and (b<=280) and (d>=225)) Or ((c=198) and (b<=349) and (d>=318)) Or ((c=269) and (b<=180) and (d>=50)) Or ((a=311) and (b<=181) and (d>=182)) Or ((c=498) and (b<=199) and (d>=50)) Or ((a=371) and (b<=100) and (d>=101)) Or ((a=620) and (b<=100) and (d>=101)) Or ((c=638) and (b<=150) and (d>=35)) Or ((c=621) and (b<=34) and (d>=35)) Or ((a=76) and (b<=279) and (d>=151)) Or ((c=149) and (b<=280) and (d>=281)) Then Begin Rectangle(a,b,c,d); Delay(10); Rectangle(a,b,c,d); End Else Begin Setcolor(14); Rectangle(a,b,c,d); Delay(10); SetColor(14); Rectangle(a,b,c,d); a:=a-1; c:=c-1; If (a=1)and(b>=295)and(d<=325) then Begin b:=350; d:=367; a:=getmaxx; c:=getmaxx+17; End; End; Until keypressed; End; AdreaptaS #77:Begin Repeat If(c=getmaxx-1) Or ((a=162) and (b<=100) and (d>=100)) Or ((a<0) and (b<=150) and (d>=150)) Or ((c=179) and (b>=15) and (d<=100)) Or ((a=182) and (b<=198) and (d>=200)) Or ((c=299) and (b<=500) and (d>=350)) Or ((c=149) and (b>=149) and (d<=297)) Or ((c=130) and (b>=315) and (d<=447)) Or ((c=449) and (b<=450) and (d>=300)) Or ((a=162) and (b<=347) and (d>=348)) Or ((a=212) and (b<=298) and (d>=299)) Or ((c=380) and (b<=400) and (d>=318)) Or ((a=332) and (b<=399) and (d>=400)) Or ((c=550) and (b<=400) and (d>=250)) Or ((a=451) and (b<=399) and (d>=400)) Or ((c=179) and (b<=280) and (d>=225)) Or ((c=179) and (b<=349) and (d>=318)) Or ((c=250) and (b<=180) and (d>=50)) Or ((a=212) and (b<=179) and (d>=182)) Or ((c=479) and (b<=199) and (d>=50)) Or ((a=282) and (b<=98) and (d>=101)) Or ((a=412) and (b<=98) and(d>=101)) Or ((c=619) and (b<=150) and (d>=35)) Or ((a=492) and (b<=32) and (d>=35)) Or ((c=74) and (b<=279) and (d>=151)) Or ((a=17) and (b<=278) and (d>=280)) Then Begin Rectangle(a,b,c,d); Delay(10); Rectangle(a,b,c,d); End Else Begin Setcolor(14); Rectangle(a,b,c,d); Delay(10); SetcolOr(14); Rectangle(a,b,c,d); a:=a+1; c:=c+1; If (c=getmaxx-1)and(b>=345)and(d<=376) then Begin b:=300; d:=317; a:=-20; c:=-3; End; End; Until keypressed; End; AteleportareS 't':Begin for i:=1 to 15 do Begin Rectangle(a+i,b+i,c,d); Delay(15); Rectangle(a+i,b+i,c,d); End; Randomize; Repeat a:=random(500);c:=a+17; b:=random(300);d:=b+17; Until (a<>0) and (b>15); for i:=1 to 15 do Begin Rectangle(a+15-i,b+15-i,c,d); Delay(100); Rectangle(a+15-i,b+15-i,c,d); End; Repeat Rectangle(a,b,c,d); Delay(100); Rectangle(a,b,c,d); Until keypressed; End; ' ':Outtextxy(x+2,y,' '); End; Until (a<x) and (x<c) and (b<y) and (y<d); For i:=0 to getmaxy-y do Begin SetColor(magenta); OutTextXY(x,y+i,'_'); Ellipse(x+3,y+i-5,0,360,7,4); Ellipse(x+15,y+i-20,0,360,20,10); OutTextXY(x+1,y+i-22,'HELP'); Delay(7); SetColor(0); OutTextXY(x,y+i-1,'_'); Ellipse(x+3,y+i-5,0,360,7,4); Ellipse(x+15,y+i-20,0,360,20,10); OutTextXY(x+1,y+i-22,'HELP'); End; OutTextXY(x,y,'_'); OutTextXY(347,3,dd); Str(n,dd); OutTextXY(347,3,dd); ClearDevice; MoveTo(0,0); SetColor(9); OutTextXY(250,3,'Scorul este:'); SetColor(yellow); OutTextXY(575,3,'Esc:exit'); OutTextXY(10,3,'t:teleportare'); Rectangle(0,15,639,479); OutTextXY(347,3,dd); SetColor(0); Line(0,150,150,150); Line(180,100,250,100); Line(180,15,180,100); Line(180,225,180,280); Line(300,500,300,350); Line(200,200,getmaxx,200); Line(0,380,130,380); Line(150,150,150,280); Line(131,330,131,430); Line(450,450,450,300); Line(180,349,380,349); Line(230,299,550,299); Line(381,318,381,400); Line(350,401,431,401); Line(551,400,551,250); Line(469,401,620,401); Line(180,318,180,349); Line(251,50,251,180); Line(230,181,310,181); Line(480,50,480,199); Line(300,100,370,100); Line(430,100,619,100); Line(620,35,620,150); Line(510,34,620,34); Line(75,151,75,279); Line(35,280,131,280); Line(150,getmaxy,150,getmaxy-4); Line(185,getmaxy,185,getmaxy-4); Line(388,15,388,19); Line(420,15,420,19); Line(0,295,4,295); Line(0,325,4,325); Line(getmaxx-4,345,getmaxx,345); Line(getmaxx-4,375,getmaxx,375); Until n=3; For i:=1 to 19 do If i mod 2 = 0 then Begin Delay(80); SetTextStyle(4,horizdir,6); Delay(80); SetColor(10); Delay(80); OutTextXY(60,160,'You are the WINNER!!!'); Delay(80); End; CloseGraph; InitGraph(gd,gm,'c:\bp\bgi'); SetColor(yellow); OutTextXY(100,250,'---Daca vrei sa mai JOCI apasa Y altfel apasa N---'); SetColor(red); OutTextXY(100,265,' ???---apoi apasa tasta ENTER---???'); Textcolor(black); Readln(r); CloseGraph; Until r='n'; End. ? Scurta prezentare Acest program este o aplicatie a Unit-ului Graph din limbajul de programare PASCAL. El reprezinta un „joculet” in care utilizatorul trebuie sa „manance” intr-un timp cat mai scurt „omuletii” de pe ecran, manevrand patratul prin intermediul sagetilor. Prin intermediul portitelor „magice” utilizatorul poate ajunge intr-un timp foarte scurt dintr-o parte a ecranului in alta. Pentru a „manca” un „omulet”, utilizatorul trebuie sa apese tasta „SPACE” cand patratul se afla deasupra acestuia Jocul continua pana cand utilizatorul distruge cinci omuleti . La sfarsitul jocului, utilizatorul poate opta pentru a iesi din joc sau pentru a reincepe jocul. Totodata jucatorul poate parasi jocul in orice moment apasand tasta ESC. Programul foloseste majoritatea functiilor grafice din limbajul de programare Pascal si are o interfata placuta. ? Limbajul Turbo Pascal , Doina Rancea, Editura Libris, Cluj, 1994 |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|