Gömb rajzolása pascalban

Ez egy kis pascal nyelven írt grafikus program, amivel olyasmi alakzatot lehet kirajzoltatni, ami legalább emlékeztet egy gömbre. Konfigurálható a forráskód elején, hogy a gömb milyen paraméterekkel rendelkezzen. Ehhez sajnos újra kell fordítani a programot. Akinek van rá lehetősége, kipróbálhatja.

Letöltés
Képernyőképek:

1. screenshot
2. screenshot

Megjegyzés:
Az egavga.bgi fájlnak az exe mellett kell maradnia!

Forráskód:

program gomb_pascalban;
(*3 dimenzios ellipszis szeru alakzat*)
uses    crt,graph;

(*konfiguralhatosag kedveert konstansban taroljuk a beallitasokat*)
const
     (*bgi fajlok helye, ha nincs az exe mellett*)
     BGI_DIR = '..\BGI';
     (*Ez jelenik meg, ha nem tudja betolteni a grafikus modot*)
     ERROR_MSG = 'Hiba: ';
     (*hatter szine 0 es 15 kozott*)
     BGCOLOR = 0;
     (*ha ures string, akkor nincs keret. Ha 0 es 15 kozti szam, akkor
     olyan szinu keretet tesz a gomb kore*)

     KERET = '';
     (*kitoltes szine. Az ellipsz  teste ilyen szinu lesz*)
     FILL = 0;
     (*Ha ures string, akkor minden vizszintes koriv mas szinu
     ha 0 es 15 kozti szam, akkor csak olyan szinu korivek lesznek*)

     MONOX = '13';
     (*Ha ures string, akkor minden fuggoleges koriv mas szinu
     ha 0 es 15 kozti szam, akkor csak olyan szinu korivek lesznek*)

     MONOY = '';
     (*ellipszis magassaga*)
     WIDTH = 400;
     (*ellipszis szelessege*)
     HEIGHT = 400;
     (*vonalak kozti ures ter nagysaga*)
     KOZ = 10;
     (*kitoltesi minta, ha a FILL es BGCOLOR kulonbozik*)
     FILLPATT : FillPatternType = ($FF, $FF, $FF,
                               $FF, $FF, $FF, $FF, $FF);

(*grafikus mod elokesziteset vegzo eljaras*)
procedure set_graph_mode(dir,errormsg:string);
      var gm,gd:integer;
          ErrCode:integer;
begin

     DetectGraph(gd,gm);
     InitGraph(gd,gm,dir);
     ErrCode:=graphResult;
     (*hiba eseten a grafikus kepernyorol karakteresre valtas
     es a hibauzenet megjelenitese gombnyomasig*)

     if (ErrCode <> 0) then begin
        RestoreCRTMode;
        write(errormsg,' ',GraphErrorMSG(ErrCode));
        repeat until keypressed;
        exit;
     end;
     (*graafikus kepernyo torlese*)
     ClearDevice;
end;

(*3d alakzat rajzolasa szelesseg, magassag,
suruseg es keret megadasaval*)

procedure rajz(w,h,koz:integer;keret:string);
      var i,c:integer;
          code:word;
begin
     (*kitoltott ellipszis szinenek beallitasa*)
     setFillPattern(FillPatt,FILL);
     (*640x480 -as keperyno kozepere rajzolas*)
     FillEllipse(320,240,w,h);
     (*vonalak rajzolasa vizszintesen*)
     i:=round(koz/2);
     c := 0;
     while (i <= w) do begin
        if (MONOX = '') then begin
             if (c < 15) then begin
                c:=c+1;
             end else begin
                c:=0;
             end;

             if (c = BGCOLOR) then begin
                if (c < 15) then begin
                   c:=c+1;
                end else begin
                   c:=0;
                   end;
                end;
             end else begin
          val(MONOX,c,code);
          end;
        setColor(c);
        Ellipse(320,240,0,360,i,h);
        i := i + koz;
     end;

    (*vonalak rajzolasa fuggolegesen*)
    i:=round(koz/2);
    c := 0;
    while (i <= h) do begin
          if (MONOY = '') then begin
             if (c < 15) then begin
                c:=c+1;
             end else begin
                c:=0;
             end;

             if (c = BGCOLOR) then begin
                if (c < 15) then begin
                   c:=c+1;
                end else begin
                   c:=0;
                   end;
                end;
             end else begin
          val(MONOY,c,code);
          end;

        setColor(c);
        Ellipse(320,240,0,360,w,i);
        i := i + koz;
    end;
    (*Keret eseten a keret megrajzolasa*)
    if (keret <> ' ') then begin
       val(keret,c,code);
       SetColor(c);
       Ellipse(320,240,0,360,w,h);
    end;
end;

BEGIN
(*Grafikus kepernyo beallitasa*)
set_graph_mode(BGI_DIR,ERROR_MSG);
(*hattar beallitasa*)
setBkColor(BGCOLOR);

(*gomb rajzolo eljaras hivasa*)
rajz(round(WIDTH/2),round(HEIGHT/2),KOZ,KERET);
(*varakozzon, es mutassa a rajzot, amig nem nyomok egy gombot*)
repeat until keypressed;
(*kilepes a grafikus modbol*)
CloseGraph;

END.

Kategóriák: 
Megosztás/Mentés