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