'===========================================================================
' Subject: FLYING STARS                       Date: 11-21-95 (00:35)       
'  Author: Eliram Haklay                      Code: QB, QBasic, PDS        
'  Origin: comp.lang.basic.misc             Packet: EGAVGA.ABC
'===========================================================================
'Here's A program I wrote.
'It's pretty simple, you can get nice effects if you use the arrows, and 
'also if you press 'w', 's', 'a', 'd'.
'Have fun.

SCREEN 12
COLOR 15
n = 15
g = 1
DIM r(n), alfa(n), s(n), c(n)
DEF fnx (r, alfa) = SIN(alfa) * r + 320
DEF fny (r, alfa) = COS(alfa) * r + 240
DEF fnr (x, y) = SQR((x - 320) ^ 2 + (y - 240) ^ 2)
DEF fnalfa (x, y) = ATN((x - 320) / (y - 240.001)) + 3.1415 * (y < 240)
'
' This Program was made by Eliram Haklay - elirama@freud.tau.ac.il
'
FOR i = 1 TO n
 r(i) = RND * 400
 alfa(i) = RND * 6.283
 s(i) = RND * 10
 c(i) = RND * 15
 COLOR c(i)
 CIRCLE (fnx(r(i), alfa(i)), fny(r(i), alfa(i))), r(i) * s(i) / 400
 'CALL star(fnx(r(i), alfa(i)), fny(r(i), alfa(i)), r(i) * s(i) / 400)
NEXT i

start:
FOR i = 1 TO n
 COLOR 0
 CIRCLE (fnx(r(i), alfa(i)), fny(r(i), alfa(i))), r(i) * s(i) / 400
 'CALL star(fnx(r(i), alfa(i)), fny(r(i), alfa(i)), r(i) * s(i) / 400)
 r(i) = r(i) + s(i) * g * r(i) / 200
 IF shift <> 0 THEN GOSUB shft
 IF r(i) > 400 OR r(i) < 9 THEN
                                r(i) = RND * 400
                                alfa(i) = RND * 6.283
                                s(i) = RND * 30
                                c(i) = RND * 15
                           END IF
 alfa(i) = alfa(i) + rot
 COLOR c(i)
 CIRCLE (fnx(r(i), alfa(i)), fny(r(i), alfa(i))), r(i) * s(i) / 400
 'CALL star(fnx(r(i), alfa(i)), fny(r(i), alfa(i)), r(i) * s(i) / 400)
NEXT i
 b$ = INKEY$
 rot = 0
 IF shift <> 0 THEN shift = shift - sh
 IF b$ <> "" THEN GOSUB keyp
GOTO start

keyp:
IF b$ = CHR$(0) + "M" THEN rot = .03
IF b$ = CHR$(0) + "K" THEN rot = -.03
IF b$ = CHR$(0) + "H" THEN g = g + .1
IF b$ = CHR$(0) + "P" THEN g = g - .1
IF b$ = "s" THEN shift = 40: direct = 1: sh = 4
IF b$ = "w" THEN shift = -40: direct = 1: sh = -4
IF b$ = "a" THEN shift = 40: direct = 2: sh = 4
IF b$ = "d" THEN shift = -40: direct = 2: sh = -4
IF b$ = CHR$(27) THEN END
RETURN

shft:
IF direct = 1 THEN
                   r1 = fnr(fnx(r(i), alfa(i)), fny(r(i), alfa(i)) + sh)
                   alfa = fnalfa(fnx(r(i), alfa(i)), fny(r(i), alfa(i)) + sh)
              ELSE
                   r1 = fnr(fnx(r(i), alfa(i)) + sh, fny(r(i), alfa(i)))
                   alfa = fnalfa(fnx(r(i), alfa(i)) + sh, fny(r(i), alfa(i)))
              END IF
r(i) = r1
alfa(i) = alfa
RETURN

SUB star (x, y, s)
'a = RND * 6.28
FOR i = 0 TO 6.28 STEP 1.256
 LINE (SIN(i + a) * s + x, COS(i + a) * s + y)-(SIN(i + .628 + a) * s / 2 + x, COS(i + .628 + a) * s / 2 + y)
 LINE (SIN(i + .628 + a) * s / 2 + x, COS(i + .628 + a) * s / 2 + y)-(SIN(i + 1.256 + a) * s + x, COS(i + 1.256 + a) * s + y)
NEXT i
END SUB
