BORDER 2: PAPER 0: BRIGHT 1: INK 7: CLS
RANDOMIZE
CONST maxstars AS UBYTE=40

DIM starX(maxstars) AS INTEGER
DIM starY(maxstars) AS INTEGER
DIM starZ(maxstars) AS INTEGER
DIM star2X(maxstars) AS INTEGER
DIM star2Y(maxstars) AS INTEGER

DIM i AS INTEGER
DIM w,h AS UBYTE
DIM wh,hh AS UBYTE
DIM scale AS UINTEGER

LET w = 255
LET h = 192
LET wh = w / 2
LET hh = h / 2
LET scale = 50

FOR i=0 TO maxstars
  GOSUB generatestar
  LET star2X(i)=1
  LET star2Y(i)=1
  LET starZ(i) = 200+(RND*56)
NEXT i

DO WHILE INKEY$ <> CHR(13)
   FOR i=0 TO maxstars
       PLOT OVER 1; INK 0; star2X(i),192-star2Y(i)
       LET star2X(i) = starX(i) * scale / starZ(i) + wh
       LET star2Y(i) = starY(i) * scale / starZ(i) + hh
       IF star2X(i) > 0 AND star2X(i) < w AND star2Y(i) > 0 AND star2Y(i) < h THEN
         PLOT INK 7; star2X(i),192-star2Y(i)
       ELSE 
         LET starZ(i) = 0
       END IF
       LET starZ(i)= starZ(i) - 10
       IF starZ(i) <= 0 THEN GOSUB generatestar
   NEXT i
LOOP
STOP

generatestar:
LET starZ(i) = 200+(RND*56)
LET starX(i) = RND * wh + 1
LET starY(i) = RND * hh + 1
IF i BAND 3 = 1 THEN LET starX(i)=-starX(i)
IF i BAND 3 = 2 THEN LET starY(i)=-starY(i)
IF i BAND 3 = 3 THEN
  LET starX(i)=-starX(i)
  LET starY(i)=-starY(i)
END IF
RETURN