[Back to EGAVGA SWAG index]  [Back to Main SWAG index]  [Original]

{
BERNIE PALLEK

> Hmm.. does anyone have an example of a starfield routine in Turbo Pascal..

OK, here's a sample (I don't know what kind of starfield you're looking for):

{EGA/VGA parallax stars}

Uses
  Crt, Graph, KasUtils;

Const
  starCol : Array[0..2] of Byte = (8, 7, 15);

Type
  StarRec = Record
    x : Integer;
    y : Integer;
    d : Integer;  { depth }
  end;

Var
  stars : Array[0..31] of StarRec;
  xinc,
  yinc  : Integer;
  ch    : Char;


Procedure OpenGraph;
Var
  gd, gm : Integer;
begin
  EgaVga_Exe;
  Gd := Detect;
  { this doesn't care if you don't have correct video card or not }
  InitGraph(gd, gm, '');   { put the path to your BGI }
end;

Procedure InitStars;
Var
  i : Integer;
begin
  For i := 0 to 31 do
  With stars[i] do
  begin
    x := Random(GetMaxX);
    y := Random(GetMaxY);
    d := Random(3);
  end;
end;

Procedure MoveStars;
Var
  i : Integer;
begin
  For i := 0 to 31 do
  With stars[i] do
  begin
    PutPixel(x, y, 0);
    x := x + xinc * (d + 1);
    if (x < 0) then
      x := x + GetMaxX;
    if (x > GetMaxX) then
      x := x - GetMaxX;
    y := y + yinc * (d + 1);
    if (y < 0) then
      y := y + GetMaxY;
    if (y > GetMaxY) then
      y := y - GetMaxY;
    PutPixel(x, y, starCol[d]);
  end;
end;

begin
  OpenGraph;  (* enter Graphics mode *)
  InitStars;
  xinc := 1;
  yinc := 0;
  Repeat
    MoveStars;
    Delay(10);
    (* Delay here For faster computers *)
  Until KeyPressed;
  ch := ReadKey;
  if (ch = #0) then
    ch := ReadKey;  (* get rid of extended keycodes *)
  CloseGraph;
end.

{
Whew!  There you have it!  Untested, of course, so you may have to iron out a
few bugs.

**** BIG HINT: You should probably use Real numbers instead of Integer numbers
for x and y positions and increments, and Round them when PutPixel-ing!  This
will allow you to make smoother transitions, as well as bouncing effects, and
other neat stuff. ****

You'll notice (if the thing works) that the stars move horizontally only, and
the dimmer ones move slower than the bright ones (parallax/multi-layered).  You
can add extra layers, but remember to change the StarCol Constant so you have
the right number of colours For the stars.

Sorry, I was too lazy to comment it thoroughly; I'm expecting that you'll be
able to figure it out Without too much trouble.  Sorry if you can't; Write me
for an explanation.  TTYL.
}

[Back to EGAVGA SWAG index]  [Back to Main SWAG index]  [Original]