Stars
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