====== 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.