Stars

 
 

program Stars;

uses Types, QuickDraw, Events, MiscTool;


type

  Star = Record

    x, y, speed: Integer;

  end;


var

  i: Integer;

  tick: LongInt;

  r: Rect;

  poly: Handle;

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


begin

  graphics(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

    stars[i].x := random mod 320;

    stars[i].y := i * 10;

    stars[i].speed := random mod 6 + 1;

  end;


  repeat

    for i := 0 to 19 do begin


      { Erase stars }


      setSolidPenPat(black);

      moveTo(stars[i].x, stars[i].y);

      line(0, 0);


      { Move stars }


      stars[i].x := stars[i].x - stars[i].speed;

      if stars[i].x < 0 then begin

        stars[i].x := 319;

        stars[i].speed := random mod 6 + 1;

      end;


      { Draw stars }


      setSolidPenPat(i mod 15 + 1);

      moveTo(stars[i].x, stars[i].y);

      line(0, 0);

    end;


    { 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);

end.

Spaceship flying in star field.


This program teaches the use of array and record to create multiple objects. It uses array to generate many stars and animate them all at once at different speed. It also teaches how to use polygon to draw a shape.


You can see the Orca/Pascal here. Orca/Pascal version is written using Object Pascal, an object oriented extension of the Pascal language.

GSoft BASIC star field


      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