Előző változat mindkét oldalon
Előző változat
Következő változat
|
Előző változat
|
inf-prog-fszi:rajz_es_grafika [2017/06/22 13:23] beistvan |
inf-prog-fszi:rajz_es_grafika [2017/06/23 11:51] (aktuális) beistvan |
| ====== Rajz és grafika ====== |
| |
| ===== A grafikus program struktúrája ===== |
| |
| 1. A grafikus könyvtár becsatolása |
| <code pascal graphunit.pas> |
| uses graph; |
| </code> |
| |
| 2. A grafikus meghajtó (driver) változójának deklarálása |
| <code pascal graphunit.pas> |
| var gd:integer; {smallint //DevPas} |
| </code> |
| |
| 3. Grafikus üzemmód változójának deklarálása |
| <code pascal graphunit.pas> |
| var gm:integer; {smallint //DevPas} |
| </code> |
| |
| 7. A grafikus üzemmódokat egyszerre is megadhatjuk |
| <code pascal graphinit.pas> |
| var gd, gm:integer; {smallint //DevPas} |
| </code> |
| |
| 5. Grafikus meghajtó kiválasztása |
| <code pascal graphkivalaszt.pas> |
| gd:=Detect; |
| </code> |
| |
| 6. A grafikus üzemmód inicializálása |
| <code pascal graphinit.pas> |
| InitGraph(gd,gm,''); |
| </code> |
| |
| 7. Grafikus hiba feldolgozása |
| <code pascal graphhiba.pas> |
| if GraphResult<>GrOk then begin |
| Write('Grafikus hiba'); |
| Halt(1); |
| end; |
| </code> |
| |
| 8. Rajzolás rajzolási parancsok |
| <code pascal grapheljarasok.pas> |
| {grafikus eljárások és függvények} |
| </code> |
| |
| 9. Kilépés a grafikus üzemmódból |
| <code pascal graphbezar.pas> |
| CloseGraph; |
| </code> |
| |
| 10. Grafikus program |
| <code pascal grafika.pas> |
| program grafika; |
| uses graph; |
| |
| var gd,gm:integer; |
| |
| begin |
| gd:=Detect; |
| InitGraph(gd,gm,''); |
| if GraphResult<>GrOk then begin |
| Write('Grafikus hiba'); |
| Halt(1); |
| end; |
| |
| {grafikus eljárások és függvények} |
| |
| CloseGraph; |
| end. |
| </code> |
| |
| ===== A grafikus parancsok ===== |
| |
| **Grafikus kurzor pozicionálása** |
| |
| ''GetX : integer'' A grafikus kurzor aktuális pozíciójának x koordinátája. |
| |
| ''GetY : integer'' A grafikus kurzor aktuális pozíciójának y koordinátája. |
| |
| ''GetMaxX : integer'' A képernyõ legnagyobb x koordinátája. |
| |
| ''GetMaxY : integer'' A képernyõ legnagyobb y koordinátája. |
| |
| ''MoveTo(x,y: integer);'' A grafikus kurzor pozícionálása az (x,y) pontra. |
| |
| ''MoveRel(dx,dy: integer);'' A grafikus kurzor eltolása (dx,dy) koordinátákkal. |
| |
| **Képernyőablak** |
| |
| ''SetActivePage(Page: word);'' Kijelöli a képernyõ aktív lapját. |
| |
| ''SetVisualPage(Page: word);'' Megjeleníti a megadott lapot. |
| |
| ''ClearDevice;'' Letörli az aktív képernyõ tartalmát. |
| |
| ''ClearViewPort;'' Letörli az aktuális ablak tartalmát. |
| |
| ''SetViewPort(x1,y1,x2,y2: integer; Clip: boolean);'' Aktuális ablak kijelölése a képernyõn. |
| |
| ''GetViewSettings(var ViewPort: ViewPortType); '' Aktuális ablak adatainak lekérdezése. |
| |
| |
| **Pont** |
| |
| ''PutPixel(x,y: integer; Pixel: word); '' Pontot rajzol a megadott színnel. |
| |
| ''GetPixel(x,y: integer): word '' Az (x,y) pont színe. |
| |
| |
| **Vonal** |
| |
| ''Line(x1,y1,x2,y2: integer); '' Vonalat rajzol két pont között. |
| |
| ''LineTo(x,y: integer); '' Vonalat húz az (x,y) pontba. |
| |
| ''LineRel(dx,dy: integer); '' Vonalat húz a (dx,dy) távolságra lévõ pontba. |
| |
| ''SetWriteMode(WriteMode: integer); '' Vonalrajzolás módjának beállítása. |
| |
| ''SetLineStyle(LineStyle,Pattern,Width: word); '' Vonal típusának beállítása. |
| |
| ''GetLineSettings(var LineInfo: LineSettingsType); '' Vonal adatainak lekérdezése. |
| |
| |
| **Poligon** |
| |
| ''Rectangle(x1,y1,x2,y2: integer);'' Téglalapot rajzol. |
| |
| ''Bar(x1,y1,x2,y2: integer);'' Kitöltött téglalapot rajzol. |
| |
| ''Bar3D(x1,y1,x2,y2: integer; Depth: word; Top: boolean);'' Téglatestet rajzol adott mélységgel. |
| |
| ''DrawPoly(NumPoints: word; var PolyPoints);'' Sokszöget rajzol. |
| |
| ''FillPoly(NumPoints: word; var PolyPoints);'' Kitöltött sokszöget rajzol. |
| |
| |
| **Kör, ellipszis** |
| |
| ''Circle(x,y: integer; Radius: word);'' Kört rajzol (x,y) középponttal és adott sugárral. |
| |
| ''Arc(x,y: integer; StAngle,EndAngle,Radius: word);'' Körívet rajzol (x,y) középponttal a megadott kezdõszög és végszög között. |
| |
| ''PieSlice(x,y: integer; StAngle,EndAngle,Radius: word);'' Körcikket rajzol és kitölti. |
| |
| ''Ellipse(x,y: integer; StAngle,EndAngle,XRadius,YRadius: word);'' Ellipszis ívet rajzol. |
| |
| ''FillEllipse(x,y: integer; XRadius,YRadius: word);'' Teljes ellipszist rajzol és kitölti. |
| |
| ''Sector(x,y: integer; StAngle,EndAngle,XRadius,YRadius: word);'' Ellipszis cikket rajzol és kitölti. |
| |
| ''GetArcCoords(var ArcCoords: ArcCoordsType);'' Az utoljára rajzolt ív kezdõ- és végkoordinátáit adja vissza. |
| |
| ''SetAspectRatio(xasp,yasp: word);'' A beépített oldalarányok megváltoztatása. |
| |
| ''GetAspectRatio(var xasp,yasp: word);'' A beépített oldalarányok értékével tér vissza. |
| |
| **Kitöltés** |
| |
| ''FloodFill(x,y: integer; Border: word);'' Az (x,y) ponttól kezdve kitölti a Borderben megadott színnel körbezárt területet. |
| |
| ''SetFillStyle(Pattern,Color: word);'' Beállítja a kitöltés mintáját és színét. |
| |
| ''SetFillPattern(Pattern: FillPatternType; Color: word);'' A felhasználó által definiált minta (8 byte) és szín beállítása. |
| |
| ''GetFillPattern(var FillPattern: FillPatternType);'' A felhasználó által definiált mintát és színt adja vissza. |
| |
| ''GetFillSettings(var FillInfo: FillSettingsType);'' Az aktuális kitöltés mintáját és színét adja vissza. |
| |
| |
| **Szín** |
| |
| ''SetBkColor(Color: word); '' Beállítja a háttér színét. |
| |
| ''SetColor(Color: word); '' Beállítja a rajzolás színét. |
| |
| ''GetBkColor(Color: word);'' Az aktuális háttérszínt adja vissza. |
| |
| ''GetColor(Color: word);'' A rajzolás aktuális színét adja vissza. |
| |
| ''SetAllPalette(var Palette: PaletteType);'' Az alappaletta színeinek beállítása. |
| |
| ''SetPalette(ColorNum,Color: word);'' Adott szín sorszámának megváltoztatása. |
| |
| ''GetPalette(var Palette: PaletteType);'' Az aktuális paletta értékeivel tér vissza. |
| |
| ''GetPaletteSize: integer'' Az aktuális paletta méretével tér vissza. |
| |
| ''GetMaxColor: word '' A maximálisan felhasználható színek száma. |
| |
| |
| **Szöveg** |
| |
| ''OutText(TextString: string); '' Szöveget ír a képernyőre. |
| |
| ''OutTextXY(x,y: integer; TextString: string); '' Szöveget ír a képernyőre (x,y) ponttól kezdve. |
| |
| ''SetTextStyle(Font,Direction,CharSize: word); '' A betű típusának, méretének, és a kiírás irányának beállítása. |
| |
| ''SetTextJustify(Horiz,Vert: word); '' A szöveg igazítása a kiírás kezdőpontjához. |
| |
| ''GetTextSettings(var TextInfo: TextSettingsType);'' A szövegkiírás aktuális beállításait adja vissza. |
| |
| ''TextHeight(TextString: string): word'' Betű magasságát adja vissza. |
| |
| ''TextWidth(TextString: string): word'' Szöveg hosszát adja vissza. |
| |
| |
| **Bittérkép** |
| |
| ''ImageSize(x1,y1,x2,y2: integer): word '' A képablak méretét adja vissza byte-ban. |
| |
| ''GetImage(x1,y1,x2,y2: integer; var BitMap); '' A paraméterként megadott képablakot menti el a pufferbe. |
| |
| ''PutImage(x,y: integer; var BitMap; BitBlt: word); '' A puffer tartalmát tölti be az (x,y) ponttól kezdve. |
| |
| <code pascal rajz.pas> |
| program rajz; |
| uses graph; |
| var gd,gm: smallint; {integer} |
| begin |
| gd := Detect; |
| InitGraph(gd, gm, ''); |
| if GraphResult <> GrOk then begin |
| Write('Grafikus hiba'); |
| Readln; |
| Halt(1); |
| end; |
| SetColor(Green); |
| Line(10, 20, 100, 200); |
| SetColor(Red); |
| Rectangle(5, 15, 105, 205); |
| SetColor(Yellow); |
| Circle(65, 50, 30); |
| PutPixel(65, 50, White); |
| Readln; |
| CloseGraph; |
| end. |
| |
| </code> |
| |
| <code pascal grafika.pas> |
| program grafika; |
| uses graph; |
| var gd,gm:smallint; {DOS-ban gd,gm:integer;} |
| i:integer; |
| begin gd:=VGA; gm:=VGAHI; InitGraph(gd,gm,''); |
| if GraphResult<>GrOk then begin Write('Grafikus hiba'); Halt(1); end; |
| {grafikus eljárások és függvények} |
| for i:=1 to 10 do |
| circle(200,200,180-i*10); |
| line(200,200,30,200); |
| line(200,200,200,30); |
| moverel(25,25);linerel(30,30); |
| moverel(0,-30);linerel(-30,30); |
| OutTextXY(10,300,'Hello!'); |
| Rectangle(20,20,60,60); |
| SetFillStyle(SolidFill,Green); |
| FloodFill(199,199,White); |
| SetFillStyle(HatchFill,Yellow); |
| for i:=1 to 4 do |
| FloodFill(20+i*20+2,198,White); |
| readln; |
| CloseGraph; |
| end. |
| </code> |
| |
| |
| <code pascal snake.pas> |
| program snake; |
| uses crt; |
| const bal=#75; fel=#72; jobb=#77; le=#80; esc=#27; max_hossz=200; |
| var x,y,dx,dy,i,j,hossz:integer; ch:char; |
| xk,yk:array[1..max_hossz]of integer; |
| begin |
| {játéktér} |
| for i:=2 to 78 do begin gotoxy(i,2);write('#'); gotoxy(i,24);write('#');end; |
| for i:=3 to 23 do begin gotoxy(2,i);write('#'); gotoxy(78,i);write('#');end; |
| i:=1; x:=10; y:=10; dx:=1; dy:=0; xk[i]:=x; yk[i]:=y; hossz:=5; |
| repeat |
| if keypressed then begin ch:=readkey; |
| if ch=#0 then ch:=readkey; end; |
| case ch of |
| bal: begin dx:=-1; dy:= 0; end; |
| fel: begin dx:= 0; dy:=-1; end; |
| jobb:begin dx:= 1; dy:= 0; end; |
| le: begin dx:= 0; dy:= 1; end; |
| end; |
| x:=x+dx; y:=y+dy; |
| if (x<2)or(x>78)or(y<2)or(y>24) then |
| begin gotoxy(4,25);write('VEGE! <ENTER> - kilepes!'); readln; exit; end; |
| gotoxy(x,y); write('O'); |
| if i<=hossz then i:=i+1 else i:=1; |
| if i<=hossz then j:=i+1 else j:=1; |
| xk[i]:=x; yk[i]:=y; |
| gotoxy(xk[j],yk[j]); write(' '); |
| delay(300); |
| until ch=esc; |
| end. |
| |
| </code> |
| |
| |
| <code pascal pontok.pas> |
| program pontok; |
| uses graph; |
| var gd,gm:smallint; i,j,x,y,c:integer; |
| begin |
| gd:=detect; |
| initgraph(gd,gm,''); |
| |
| rectangle(0,0,200,200); {négyzet} |
| line(0,0,200,200); {foátló} |
| line(0,200,200,0); {mellékátló} |
| Randomize; |
| |
| for i:=1 to 8000 do begin |
| x:=1+random(198); {véletlen számok 1-199ig} |
| y:=1+random(198); |
| c:=1+random(14); |
| if (x>y)and(x+y>200+1)then PutPixel(x,y,red); |
| if (x>y)and(x+y<200+1)then PutPixel(x,y,blue); |
| if (x<y)and(x+y>200+1)then PutPixel(x,y,green); |
| if (x<y)and(x+y<200+1)then PutPixel(x,y,yellow); |
| end; |
| |
| {PutPixel(10,10,green); |
| for i:=1 to 10 do |
| for j:=1 to 10 do |
| PutPixel(10+i,10+j,green); |
| } |
| readln; |
| closegraph; |
| end. |
| </code> |
| |
| |
| <code pascal animacio.pas> |
| program animacio; |
| uses graph,crt; |
| var gd,gm:smallint; i:integer; |
| begin |
| gd:=detect; |
| initgraph(gd,gm,''); |
| setcolor(yellow); |
| circle(50,50,40); |
| OutTextXY(10,150,'Animacio!'); |
| for i:=0 to 400 do |
| begin |
| setcolor(yellow); |
| circle(50+i,50,40); |
| delay(50); |
| setcolor(black); |
| circle(50+i,50,40); |
| end; |
| OutTextXY(80,150,'Vege!'); |
| readln; |
| closegraph; |
| end. |
| </code> |
| |
| |