DECLARE SUB intro () DECLARE SUB flonker () DECLARE SUB bol () DECLARE SUB glij () DECLARE SUB rota () DECLARE SUB xpand () DECLARE SUB stermenu () DECLARE SUB menu () DECLARE SUB sterxpnd () DECLARE SUB sterglij () DECLARE SUB sterrot () DECLARE SUB ster11 () DECLARE SUB Sterren () COMMON SHARED pi, fmen$(), men pi = ATN(1) * 4 DIM fmen$(6) fmen$(6) = " -> END" fmen$(0) = " -> bolletjes" fmen$(1) = " -> flonkering" fmen$(2) = " -> rotatie" fmen$(3) = " -> zijraam" fmen$(4) = " -> cockpit" fmen$(5) = " -> omtrent STERREN..." SCREEN 12 RANDOMIZE TIMER CALL intro menu: CALL stermenu GOTO menu END SUB bol CLS n% = 250 REDIM x%(500), y%(500), c%(500), r%(500), rmax%(500) FOR i% = 1 TO 500 x%(i%) = RND * 639 + 1 y%(i%) = RND * 449 + 1 c%(i%) = RND * 15 + 1 r%(i%) = RND * 5 + 1 rmax%(i%) = r%(i%) NEXT FOR i% = 1 TO n% CIRCLE (x%(i%), y%(i%)), r%(i%), 1 PAINT (x%(i%), y%(i%)), c%(i%), 1 NEXT flonker: DO i% = RND * (n% - 1) + 1 PAINT (x%(i%), y%(i%)), 0, 0 r%(i%) = (r%(i%) + 1) MOD rmax%(i%) CIRCLE (x%(i%), y%(i%)), r%(i%), 1 PAINT (x%(i%), y%(i%)), c%(i%), 1 IF tijd <> 0 AND TIMER - tijd > 1 THEN LOCATE 1, 1: PRINT " " tijd = 0 END IF a$ = INKEY$ LOOP WHILE a$ = "" SELECT CASE a$ CASE CHR$(0) + "H" '''flonkerstraal vergroten rmax%(i%) = rmax%(i%) + 1 IF rmax%(i%) > 50 THEN rmax%(i%) = 50 LOCATE 1, 1: PRINT USING "###"; rmax%(i%): tijd = TIMER CASE CHR$(0) + "P" '''flonkerstraal verkleinen rmax%(i%) = rmax%(i%) - 1 IF rmax%(i%) < 1 THEN rmax%(i%) = 1 LOCATE 1, 1: PRINT USING "###"; rmax%(i%): tijd = TIMER CASE CHR$(0) + "M": '''1 ster meer n% = n% + 1: IF n% > 500 THEN n% = 500 LOCATE 1, 1: PRINT USING "###"; n%: tijd = TIMER CASE CHR$(0) + "K" '''1 ster minder CIRCLE (x%(n%), y%(n%)), r%(n%), 0 PAINT (x%(n%), y%(n%)), 0, 0 n% = n% - 1: IF n% < 1 THEN n% = 1 LOCATE 1, 1: PRINT USING "###"; n%: tijd = TIMER CASE ELSE: EXIT SUB END SELECT GOTO flonker END SUB SUB flonker CLS REDIM x%(500), y%(500), r%(500), rmax%(500), i%(201), c%(500) n% = 200 '''sterrenmax f% = 25 jmax% = 25 '''flonkermax FOR k% = 0 TO 500 x%(k%) = RND * 640 + 1 y%(k%) = RND * 450 + 1 c%(k%) = RND * 15 + 1 ' dx%(k%) = RND * 5 + 1 NEXT k% FOR k% = 0 TO n% PSET (x%(k%), y%(k%)), c%(k%) NEXT FOR j% = 0 TO jmax% i%(j%) = RND * n% LINE (x%(i%(j%)) - 1, y%(i%(j%)))-(x%(i%(j%)) + 2, y%(i%(j%))), c%(i%(j%)) LINE (x%(i%(j%)), y%(i%(j%)) - 2)-(x%(i%(j%)), y%(i%(j%)) + 3), c%(i%(j%)) NEXT j% flonker11: DO LINE (x%(i%(0)) - 1, y%(i%(0)))-(x%(i%(0)) + 2, y%(i%(0))), 0 LINE (x%(i%(0)), y%(i%(0)) - 2)-(x%(i%(0)), y%(i%(0)) + 3), 0 IF i%(0) <= n% THEN PSET (x%(i%(0)), y%(i%(0))), c%(i%(0)) FOR j% = 0 TO jmax% - 1 i%(j%) = i%(j% + 1) NEXT j% i%(jmax%) = RND * n% IF RND < .5 THEN IF i%(j%) <= n% THEN LINE (x%(i%(j%)) - 1, y%(i%(j%)))-(x%(i%(j%)) + 2, y%(i%(j%))), c%(i%(j%)) LINE (x%(i%(j%)), y%(i%(j%)) - 2)-(x%(i%(j%)), y%(i%(j%)) + 3), c%(i%(j%)) END IF ELSE PSET (x%(i%(jmax%)), y%(i%(jmax%))), 0 END IF a$ = INKEY$ IF TIMER - tijd > 1 THEN LOCATE 1, 1: PRINT " " LOOP WHILE a$ = "" SELECT CASE a$ 'CASE CHR$(13): GOTO bewerkmenu CASE CHR$(0) + "H" '''flonker 1 meer jmax% = jmax% + 1 IF jmax% > 200 THEN jmax% = 200 IF jmax% > n% THEN jmax% = n% LOCATE 1, 1: PRINT USING "###"; jmax%: tijd = TIMER i%(jmax%) = RND * n% CASE CHR$(0) + "P" '''flonker 1 minder jmax% = jmax% - 1: IF jmax% < 1 THEN jmax% = 1 LOCATE 1, 1: PRINT USING "###"; jmax%: tijd = TIMER LINE (x%(i%(jmax% + 1)) - 1, y%(i%(jmax% + 1)))-(x%(i%(jmax% + 1)) + 2, y%(i%(jmax% + 1))), 0 LINE (x%(i%(jmax% + 1)), y%(i%(jmax% + 1)) - 2)-(x%(i%(jmax% + 1)), y%(i%(jmax% + 1)) + 3), 0 PSET (x%(i%(jmax% + 1)), y%(i%(jmax% + 1))), c%(i%(jmax% + 1)) CASE CHR$(0) + "M": '''1 ster meer n% = n% + 1: IF n% > 500 THEN n% = 500 LOCATE 1, 1: PRINT USING "###"; n%: tijd = TIMER PSET (x%(n%), y%(n%)), c%(n%) CASE CHR$(0) + "K" '''1 ster minder PSET (x%(n%), y%(n%)), 0 n% = n% - 1 IF n% < 1 THEN n% = 1 IF n% < jmax% THEN n% = jmax% 'PSET (x%(n% + 1), y%(n% + 1)), 0 LOCATE 1, 1: PRINT USING "###"; n%: tijd = TIMER CASE ELSE: EXIT SUB END SELECT GOTO flonker11 END SUB SUB glij CLS n% = 150 REDIM x%(500), y%(500), c%(500), dx%(500), xo%(500), yo%(500) stap% = 15: trace% = 0: vul% = 0 FOR k% = 0 TO 500 x%(k%) = RND * 600 y%(k%) = RND * 417 + 18 c%(k%) = RND * 15 + 1 dx%(k%) = RND * stap% + 1 NEXT glij: DO FOR k% = 0 TO n% xo%(k%) = x%(k%) yo%(k%) = y%(k%) x%(k%) = xo%(k%) + dx%(k%) IF x%(k%) >= 600 THEN dx%(k%) = RND * stap% + 1 x%(k%) = RND * dx%(k%) y%(k%) = RND * 417 + 18 c%(k%) = RND * 15 + 1 END IF NEXT FOR k% = 0 TO n% IF trace% = 0 THEN PSET (xo%(k%) + 20, yo%(k%)), 0 PSET (x%(k%) + 20, y%(k%)), c%(k%) NEXT a$ = INKEY$ IF tijd <> 0 AND TIMER - tijd > 1 THEN LOCATE 1, 1: PRINT " " PAINT (1, 1), vul%, vul% tijd = 0 END IF LOOP WHILE a$ = "" SELECT CASE a$ 'CASE CHR$(13): GOTO bewerkmenu CASE " " CLS IF vul% = 8 THEN vul% = 0 ELSE vul% = 8 IF vul% = 8 THEN LINE (19, 17)-(621, 436), 7, B PAINT (10, 10), vul%, 7 ELSE LINE (19, 17)-(621, 436), 0, B PAINT (10, 10), 0, 0 END IF CASE "." IF trace% = 0 THEN trace% = 1 ELSE trace% = 0 CASE CHR$(0) + "H" '''sneller IF stap% < 100 THEN stap% = stap% + 1 LOCATE 1, 1: PRINT USING "###"; stap%: tijd = TIMER CASE CHR$(0) + "P" '''trager IF stap% > 1 THEN stap% = stap% - 1 LOCATE 1, 1: PRINT USING "###"; stap%: tijd = TIMER CASE CHR$(0) + "M": '''1 ster meer IF n% < 6 THEN n% = n% + 1 ELSE n% = n% * 1.1 IF n% > 500 THEN n% = 500 LOCATE 1, 1: PRINT USING "###"; n%: tijd = TIMER 'PSET (x%(n%), y%(n%)), c%(n%) CASE CHR$(0) + "K" '''1 ster minder no% = n% IF n% < 6 THEN n% = n% - 1 ELSE n% = n% / 1.1 IF n% < 1 THEN n% = 1 FOR i% = n% TO no% PSET (x%(i%) + 20, y%(i%)), 0 NEXT i% LOCATE 1, 1: PRINT USING "###"; n%: tijd = TIMER CASE ELSE: EXIT SUB END SELECT GOTO glij END SUB SUB intro SCREEN 12: CLS : COLOR 11 PLAY "p18l18o3cef+g+>c" PRINT "Welkom in de STERREN ! >1/2" COLOR 15: PRINT : PRINT PRINT "Beschrijving van de opties en hun actieve toetsen:" PRINT COLOR 11: PRINT "Bolletjes": COLOR 7 COLOR 7: PRINT "Sterren als flonkerende schijven": PRINT COLOR 7: PRINT "-> Horizontale pijltoetsen voor meer of minder sterren" PRINT "-> Verticale pijltoetsen voor grotere of kleinere schijven" PRINT : PRINT COLOR 11: PRINT "Flonkering": COLOR 7 COLOR 7: PRINT "Sterren als flonkerende kruisjes": PRINT COLOR 7: PRINT "-> Horizontale pijltoetsen voor meer of minder sterren" PRINT "-> Verticale pijltoetsen voor meer of minder flonkerende sterren" PRINT : PRINT COLOR 11: PRINT "Rotatie": COLOR 7 COLOR 7: PRINT "Een draaiende sterrensfeer": PRINT COLOR 7: PRINT "-> Hor. pijltoetsen voor meer of minder sterren (vol scherm = 500 sterren)" PRINT "-> Verticale pijltoetsen voor grotere of kleinere rotatiestap" PRINT "-> Toggel '.' om sterren wel of niet te tracen (=niet wissen)" PRINT "-> SPATIE om scherm te wissen" PRINT LOCATE 28, 15: COLOR 3: PRINT ">>> druk een toets <<<" SLEEP: a$ = INKEY$ CLS : COLOR 11 IF mel = 1 THEN PLAY "l18o3g" PRINT "Welkom in de STERREN ! >2/2" PRINT : PRINT COLOR 11: PRINT "Zijraam": COLOR 7 COLOR 7: PRINT "Raam op voorbijschuivende sterrenhemel": PRINT COLOR 7: PRINT "-> Horizontale pijltoetsen voor meer of minder sterren" PRINT "-> Verticale pijltoetsen voor sneller of trager schuiven" PRINT "-> Toggel '.' om sterren wel of niet te tracen (=niet wissen)" PRINT "-> Toggel SPATIE om raam wel of niet te tekenen; ook schermwisser" PRINT : PRINT COLOR 11: PRINT "Cockpit": COLOR 7 COLOR 7: PRINT "Raam op toesnellende sterrenhemel": PRINT COLOR 7: PRINT "-> Horizontale pijltoetsen voor meer of minder sterren" PRINT "-> Verticale pijltoetsen voor sneller of trager zoomen" PRINT "-> Toggel '.' om sterren wel of niet te tracen (=niet wissen)" PRINT "-> Toggel SPATIE om raam wel of niet te tekenen; ook schermwisser" PRINT : COLOR 10 LOCATE 25, 14 PRINT "Credits: guido wuyts 1995" LOCATE 28, 15: COLOR 3: PRINT ">>> druk een toets <<<" SLEEP: a$ = INKEY$: a$ = "" END SUB SUB rota CLS n% = 80 '''sterrenmax REDIM x%(500), y%(500), r%(500), aa(500), c%(500), xo%(500), yo%(500) REDIM aant(10), opp(10) x0% = RND * 640: y0% = RND * 480 r1 = x0% ^ 2 + y0% ^ 2 '''max straal zoeken r2 = (640 - x0%) ^ 2 + y0% ^ 2 r3 = (640 - x0%) ^ 2 + (480 - y0%) ^ 2 r4 = x0% ^ 2 + (480 - y0%) ^ 2 r = r1 IF r2 > r THEN r = r2 IF r3 > r THEN r = r3 IF r4 > r THEN r = r4 rmax% = SQR(r) '''max straal dr% = rmax% / 10 '''schijfverdeling dn% daa = pi / 180 '''rotatiestap r% = 0 k% = 0: x%(0) = x0%: y%(0) = y0%: c%(0) = 15 trace% = 0 coordrot: 'RND verdeling met poolcoord. : behoud van dichtheid door berekening 'van juiste aantallen (dn) in de schijf (r,r+dr) '----------------------------------------------- opp = 0 FOR i% = 0 TO 9 IF i% = 0 THEN opp(i%) = pi * dr% ^ 2 '''oppervl. schijf 0 ELSE opp(i%) = 2 * pi * (i% * dr%) * dr% '''oppervl. schijf i END IF opp = opp + opp(i%) NEXT i% FOR i% = 0 TO 9: aant(i%) = (opp(i%) / opp) * 500: NEXT i%'''breng op 500 kk% = 0: r% = 0 FOR j% = 0 TO 9 '''vul schijf j r% = j% * dr% FOR i% = 1 TO aant(j%) k% = kk% + i% r%(k%) = r% + RND * dr% aa(k%) = RND * 2 * pi x%(k%) = x0% + r%(k%) * COS(aa(k%)) y%(k%) = y0% + r%(k%) * SIN(aa(k%)) c%(k%) = RND * 15 + 1 NEXT i% kk% = k% NEXT j% FlonkerRot: DO t% = t% + 1 FOR k% = 0 TO n% xo%(k%) = x%(k%): yo%(k%) = y%(k%) aa = aa(k%) + t% * daa x%(k%) = x0% + r%(k%) * COS(aa) y%(k%) = y0% + r%(k%) * SIN(aa) NEXT k% FOR k% = 0 TO n% IF trace% = 0 THEN LINE (xo%(k%) - 1, yo%(k%))-(xo%(k%) + 1, yo%(k%)), 0 LINE (xo%(k%), yo%(k%) - 2)-(xo%(k%), yo%(k%) + 2), 0 END IF IF RND < .1 THEN LINE (x%(k%) - 1, y%(k%))-(x%(k%) + 1, y%(k%)), c%(k%) LINE (x%(k%), y%(k%) - 2)-(x%(k%), y%(k%) + 2), c%(k%) ELSE PSET (x%(k%), y%(k%)), c%(k%) END IF NEXT k% IF TIMER - tijd > 1 THEN LOCATE 1, 1: PRINT " " a$ = INKEY$ LOOP WHILE a$ = "" SELECT CASE a$ CASE "." IF trace% = 0 THEN trace% = 1 ELSE trace% = 0 CASE " ": CLS CASE CHR$(0) + "H" '''roteer sneller daa = daa * 1.1: IF daa > pi / 9 THEN daa = pi / 9 LOCATE 1, 1: PRINT USING "###"; daa * 180 / pi: tijd = TIMER CASE CHR$(0) + "P" '''flonker 1 minder daa = daa / 1.1: IF daa < pi / 180 THEN daa = pi / 180 LOCATE 1, 1: PRINT USING "###"; daa * 180 / pi: tijd = TIMER CASE CHR$(0) + "M": '''1 ster meer n% = n% * 1.1: IF n% > 500 THEN n% = 500 LOCATE 1, 1: PRINT USING "###"; n%: tijd = TIMER CASE CHR$(0) + "K" '''1 ster minder no% = n% n% = n% * .9: IF n% < 1 THEN n% = 1 FOR i% = n% TO no% LINE (x%(i%) - 1, y%(i%))-(x%(i%) + 1, y%(i%)), 0 LINE (x%(i%), y%(i%) - 2)-(x%(i%), y%(i%) + 2), 0 NEXT i% LOCATE 1, 1: PRINT USING "###"; n%: tijd = TIMER CASE ELSE: EXIT SUB END SELECT GOTO FlonkerRot END SUB SUB stermenu SCREEN 12 CLS : COLOR 15 tit$ = "STERREN" LOCATE 5, 16: PRINT tit$ c$ = "": FOR i = 1 TO LEN(tit$): c$ = c$ + "*": NEXT i LOCATE 6, 16: PRINT c$ mentot = 6 COLOR 7: FOR i = 0 TO mentot: LOCATE i + 8, 14: PRINT fmen$(i): NEXT i LOCATE 28, 1: COLOR 3: PRINT " >>> Kies en selecteer optie met pijltoetsen <<<" jn = 0: j = 0 'IF mel = 1 THEN PLAY "p18l18o3ef+g+>c" j = men: jn = j kiesmenu: IF INKEY$ = a$ AND TIMER - tijd < .1 GOTO verdermenu tijd = TIMER IF jn = -1 THEN jn = mentot COLOR 7: LOCATE j + 8, 14: PRINT fmen$(j) j = jn COLOR 11: LOCATE j + 8, 14: PRINT fmen$(j) verdermenu: SLEEP: a$ = INKEY$ SELECT CASE a$ CASE CHR$(13): GOTO bewerkmenu CASE CHR$(0) + "K": GOTO bewerkmenu CASE CHR$(0) + "M": GOTO bewerkmenu CASE CHR$(0) + "P": jn = (j + 1) MOD (mentot + 1): GOTO kiesmenu CASE CHR$(0) + "H": jn = (j - 1) MOD (mentot + 1): GOTO kiesmenu CASE ELSE: GOTO verdermenu END SELECT bewerkmenu: men = j SELECT CASE men CASE 0: CALL bol CASE 1: CALL flonker CASE 2: CALL rota CASE 3: CALL glij CASE 4: CALL xpand CASE 5: CALL intro CASE 6: '''(mentot = -> END) ''' PLAY "l21o3c" LOCATE 28, 1: COLOR 0: PRINT " >>> Kies optie met cursortoetsen <<<" LOCATE 28, 1: COLOR 3 COLOR 3: LOCATE 28, 5: PRINT " >>> ENTER = Niet stoppen <<< " COLOR 15: LOCATE 25, 5: PRINT " Bent u zeker ?" SLEEP: a$ = INKEY$ IF a$ <> CHR$(13) THEN 'IF mel = 1 THEN PLAY "p18l18o4c>> Kies en selecteer optie met pijltoetsen <<<" 'IF mel = 1 THEN PLAY "l21o3cp21gp21>c" GOTO verdermenu END SELECT END SUB SUB xpand CLS n% = 25 '''sterrenmax DIM x%(100), y%(100), rho(100), r%(100), aa(100), c%(100), xo%(100), yo%(100) pi = ATN(1) * 4 x0% = 320: y0% = 240 rmax% = 500: daa = pi / 360: dr% = 100: rmin% = 20 rhomax = .1: trace% = 0: vul% = 0 'RND verdeling met poolcoord. : behoud van dichtheid door berekening 'van juiste aantallen (dn) in de schijf (r,r+dr) '----------------------------------------------- k% = 0 FOR r% = 0 TO rmax% - dr% STEP dr% dn% = 2 * n% * ((r% + .5 * dr%) / rmax%) * (dr% / rmax%) FOR i% = 0 TO dn% IF k% > 100 GOTO uitdij r%(k%) = 1 + r% + RND * dr% IF r%(k%) < 11 THEN r%(k%) = 11 '''onder 11 geen vermenigv. met 1.05... aa(k%) = RND * 2 * pi x%(k%) = x0% + r%(k%) * COS(aa(k%)) y%(k%) = y0% + r%(k%) * SIN(aa(k%)) IF .0001 * (x% - 20) * (x% - 620) >= 0 OR .0001 * (y% - 18) * (y% - 435) >= 0 THEN r%(k%) = 1 + RND * dr%: aa(k%) = RND * 2 * pi IF r%(k%) < 11 THEN r%(k%) = 11 '''onder 11 geen vermenigv. met 1.05... ' rho(k%) = .05 + RND * rhomax x%(k%) = x0% + r%(k%) * COS(aa(k%)) y%(k%) = y0% + r%(k%) * SIN(aa(k%)) END IF c%(k%) = RND * 15 + 1 rho(k%) = .05 + RND * rhomax k% = k% + 1 NEXT i% NEXT r% uitdij: DO t% = t% + 1 FOR k% = 0 TO n% xo%(k%) = x%(k%): yo%(k%) = y%(k%) r%(k%) = r%(k%) * (1 + rho(k%)) x% = x0% + r%(k%) * COS(aa(k%)) y% = y0% + r%(k%) * SIN(aa(k%)) IF .0001 * (x% - 20) * (x% - 620) >= 0 OR .0001 * (y% - 18) * (y% - 435) >= 0 THEN r%(k%) = 1 + RND * dr%: aa(k%) = RND * 2 * pi IF r%(k%) < 11 THEN r%(k%) = 11 '''onder 11 geen vermenigv. met 1.05... c%(k%) = RND * 15 + 1 rho(k%) = .05 + RND * rhomax x% = x0% + r%(k%) * COS(aa(k%)) y% = y0% + r%(k%) * SIN(aa(k%)) END IF x%(k%) = x%: y%(k%) = y% NEXT k% FOR k% = 0 TO n% IF trace% = 0 THEN PSET (xo%(k%), yo%(k%)), 0 PSET (x%(k%), y%(k%)), c%(k%) NEXT k% a$ = INKEY$ IF tijd <> 0 AND TIMER - tijd > 1 THEN LOCATE 1, 1: PRINT " " PAINT (1, 1), vul%, vul% tijd = 0 END IF LOOP WHILE a$ = "" SELECT CASE a$ 'CASE CHR$(13): GOTO bewerkmenu CASE " " CLS IF vul% = 8 THEN vul% = 0 ELSE vul% = 8 IF vul% = 8 THEN LINE (19, 17)-(621, 436), 7, B PAINT (10, 10), vul%, 7 ELSE LINE (19, 17)-(621, 436), 0, B PAINT (10, 10), 0, 0 END IF CASE "." IF trace% = 0 THEN trace% = 1 ELSE trace% = 0 CASE CHR$(0) + "H" '''sneller rhomax = rhomax * 1.1 IF rhomax > 2 THEN rhomax = 2 LOCATE 1, 1: PRINT USING "###"; rhomax * 100: tijd = TIMER CASE CHR$(0) + "P" '''trager rhomax = rhomax * .9 IF rhomax < .05 THEN rhomax = .05 LOCATE 1, 1: PRINT USING "###"; rhomax * 100: tijd = TIMER CASE CHR$(0) + "M": '''1 ster meer IF n% < 6 THEN n% = n% + 1 ELSE n% = n% * 1.1 IF n% > 100 THEN n% = 100 LOCATE 1, 1: PRINT USING "###"; n%: tijd = TIMER 'PSET (x%(n%), y%(n%)), c%(n%) CASE CHR$(0) + "K" '''1 ster minder no% = n% IF n% < 6 THEN n% = n% - 1 ELSE n% = n% / 1.1 IF n% < 1 THEN n% = 1 FOR i% = n% TO no% PSET (x%(i%), y%(i%)), 0 NEXT i% LOCATE 1, 1: PRINT USING "###"; n%: tijd = TIMER CASE ELSE: EXIT SUB END SELECT GOTO uitdij END SUB