====== Rajz és grafika ====== ===== A grafikus program struktúrája ===== 1. A grafikus könyvtár becsatolása uses graph; 2. A grafikus meghajtó (driver) változójának deklarálása var gd:integer; {smallint //DevPas} 3. Grafikus üzemmód változójának deklarálása var gm:integer; {smallint //DevPas} 7. A grafikus üzemmódokat egyszerre is megadhatjuk var gd, gm:integer; {smallint //DevPas} 5. Grafikus meghajtó kiválasztása gd:=Detect; 6. A grafikus üzemmód inicializálása InitGraph(gd,gm,''); 7. Grafikus hiba feldolgozása if GraphResult<>GrOk then begin Write('Grafikus hiba'); Halt(1); end; 8. Rajzolás rajzolási parancsok {grafikus eljárások és függvények} 9. Kilépés a grafikus üzemmódból CloseGraph; 10. Grafikus program 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. ===== 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. 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. 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. 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! - 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. 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 (x200+1)then PutPixel(x,y,green); if (x 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.