Program exemplu - Star Field
Lectia 5 (din tutorialele de Pascal)
Acesta este un exemplu de (mic) program care arata o parte din potentialul primelor cinci tutoriale de Pascal postate pana in acest moment.
Creat si testat doar pe Borland Pascal 7.0, deci sa nu va aud

Urmeaza codul:
- uses crt, graph;
- type star = record
- X, Y, Z: Integer;
- { pozitia si departarea "stelei" }
- end;
- const N = 250; {numarul de "stele"}
- var gd, gm: Integer; {init graphics mode}
- i, Sx, Sy: integer;
- stars: array[1 .. N] of star;
- procedure InitStars; {initializeaza "N" stele : pozitie si departare}
- var i: Integer;
- begin
- Sx := GetMaxX; {numarul de coloane in modul grafic}
- Sy := GetMaxY; {numarul de linii in modul grafic}
- Randomize;
- for i := 1 to N do
- begin
- stars[i].X := Random(Sx - 9) + 5; {pozitia}
- stars[i].Y := Random(Sy - 9) + 5;
- stars[i].Z := Random(250) + 1; {departarea trebuie sa fie}
- end; {cat mai aleatorie la inceput}
- end;
- procedure MoveStars;
- var i, X, Y, Z: Integer;
- color, speed: Byte;
- pause: Boolean;
- begin
- pause := False;
- speed := 5;
- repeat {bucla infinita ... este oprita daca se apasa tasta Escape}
- if not pause then
- for i := 1 to N do
- begin
- X := round((stars[i].X * 256) / stars[i].Z) + Sx shr 1; {calcularea pozitiei unei stele, in functie de Z (adancime)}
- Y := round((stars[i].Y * 256) / stars[i].Z) + Sy shr 1; {shr 1 = div 2. Shift pe biti catre dreapta, adica impartire intreaga la 2}
- SetColor(Black);
- Rectangle(X, Y, X+1, Y+2);
- if (X < 2) or (X > Sx - 2) or {daca "steaua" iese din monitor,}
- (Y < 2) or (Y > Sy - 2) or {ii schimbam pozitia si departarea}
- (stars[i].Z < 10) then
- begin
- stars[i].X := Random(Sx - 9) + 5;
- stars[i].Y := Random(Sy - 9) + 5;
- stars[i].Z := Random(20) + 230; {departarea trebuie sa fie maxima}
- end;
- Dec(stars[i].Z);
- X := Round((stars[i].X * 256) / stars[i].Z) + Sx shr 1; {noua coloana a "stelei"}
- Y := Round((stars[i].Y * 256) / stars[i].Z) + Sy shr 1; {noua linie a "stelei"}
- case (stars[i].Z div 3) of {cu cat "steaua" e mai departata,}
- 65: color := DarkGray; {cu atat e mai inchisa la culoare}
- 35: color := LightGray;
- 20: color := White;
- end;
- SetColor(color);
- if stars[i].Z > 120
- then PutPixel(X, Y, color) {cu cat e mai aproape steaua,}
- else Rectangle(X, Y, X+1, Y+1) {cu atat e mai mare}
- end;
- if KeyPressed then
- begin
- case UpCase(ReadKey) of
- #27 : Break; {s-a apasat Escape, asa ca iesim}
- 'P' : pause := not pause; {s-a apasat P, punem pauza - sau o scoatem}
- '+' : if (speed > 1) then {plus - crestem viteza}
- dec(speed);
- '-' : if (speed < 80) then {minus - scadem viteza}
- inc(speed);
- end;
- end;
- Delay(speed);
- until False;
- end;
- begin
- gd := 0;
- InitGraph(gd, gm, '');
- InitStars;
- MoveStars;
- CloseGraph;
- end.
Functiile si procedurile legate de afisare le voi explica intr-un tutorial separat.
Screenshot din timpul rularii programului:

Surse si executabil (fisierul EGAVGA.BGI inclus !)-
Atentie: Daca folositi Windows Vista sau Windows Seven, cititi acest articol despre DOSBox.
Welcome to BitCell. Click here to register !