'=========================================================================== ' 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