Stars

 
 

program Stars;

uses Common, QuickDrawII, EventMgr, MscToolSet;


type

  Star = Object

    x, y, speed: Integer;

    procedure setup;

    procedure move;

  end;


var

  i: Integer;

  tick: LongInt;

  r: Rect;

  poly: polyHandle;

  stars: Array[0..19] of Star;


procedure Star.setup;

begin

  x := randomInteger mod 320;

  y := i * 10;

  speed := randomInteger mod 6 + 1;

end;


procedure Star.move;

begin

  setSolidPenPat(black);

  moveTo(x, y);

  line(0, 0);


  x := x - speed;

  if x < 0 then begin

    x := 319;

    speed := randomInteger mod 6 + 1;

  end;


  setSolidPenPat(i mod 15 + 1);

  moveTo(x, y);

  line(0, 0);

end;


begin

  startDesk(320);

  clearScreen(black);

  hideCursor;

  tick := getTick;


  { Draw spaceship }


  setSolidPenPat(7);

  setRect(r, 0, 93, 25, 97);

  paintOval(r);


  poly := openPoly;

  moveTo(10, 91);

  lineTo(30, 95);

  lineTo(10, 99);

  closePoly;

  setSolidPenPat(4);

  paintPoly(poly);


  setSolidPenPat(5);

  moveTo(8, 91);

  line(8, 0);

  moveTo(8, 98);

  line(8, 0);


  { Setup stars }


  for i := 0 to 19 do begin

    new(stars[i]);

    stars[i].setup;

  end;


  repeat


    { Move stars }

   

    for i := 0 to 19 do

      stars[i].move;


    { Draw fire }


    if random > 0 then setSolidPenPat(9)

    else setSolidPenPat(7);


    moveTo(5, 94);

    line(4, 0);


    repeat until getTick > tick;

    tick := tick + 1;

  until button(0);


  for i := 0 to 19 do

    dispose(stars[i]);


  endDesk;

end.

 

Orca/Pascal version, written using Object Pascal to demonstrate object oriented programming.


GSoft BASIC star field version:

      TYPE STAR

        X AS INTEGER

        Y AS INTEGER

        SPEED AS INTEGER

      END TYPE


      DIM STARS(15) AS STAR


      ! Setup stars


      HGR

      FOR I = 1 TO 15

        STARS(I).X = RND (1) * 320

        STARS(I).Y = I * 12

        STARS(I).SPEED = RND (1) * 6 + 1

      NEXT


      DO

        FOR I = 1 TO 15


          ! Erase star


          HCOLOR= 0

          HPLOT STARS(I).X, STARS(I).Y


          ! Draw star


          STARS(I).X = STARS(I).X - STARS(I).SPEED

          IF STARS(I).X < 0 THEN STARS(I).X = 319


          HCOLOR= I

          HPLOT STARS(I).X, STARS(I).Y

        NEXT

      LOOP