'fireworks

CONST num = 400
CONST grav = .3
CONST vel = 6

DIM x(1 TO num) AS SINGLE
DIM y(1 TO num) AS SINGLE
DIM dx(1 TO num) AS SINGLE
DIM dy(1 TO num) AS SINGLE
DIM limit(1 TO num) AS INTEGER
DIM c(1 TO num) AS INTEGER
DIM col(1 TO num) AS INTEGER

DIM i%, j%, k%, l%, a%, s%
DIM mx!, my!, mdx!, mdy!, mcol%

RANDOMIZE TIMER

CLS
SCREEN 12

WHILE INKEY$ = ""

    mcol = 16 * RND
    mx = 120 + (400 * RND)
    my = 460
    mdx = 1 - (2 * RND)
    mdy = (-10 * RND) - 5
    
    WHILE mdy < 0
        PSET (mx, my), 0
        mdy = mdy + grav
        mx = mx + mdx
        my = my + mdy
        PSET (mx, my), 15
        FOR k = 1 TO 5000: NEXT k
    WEND

    xx = mx
    yy = my

    FOR i = 1 TO num
        c(i) = 0
        col(i) = 1 + (16 * RND)
        x(i) = xx
        y(i) = yy
        limit(i) = 15 * RND
        a = 20 * RND
        s = vel - ((vel * 2) * RND)
        dx(i) = (s / 2) - (s * COS(a))
        dy(i) = (s / 2) - (s * SIN(a))
    NEXT i

    FOR i = 1 TO 20
        FOR j = 1 TO num
            PSET (x(j), y(j)), 0
            IF c(j) > limit(j) THEN GOTO jump
            dy(j) = dy(j) + grav
            x(j) = x(j) + dx(j)
            y(j) = y(j) + dy(j)
            PSET (x(j), y(j)), col(j)
            c(j) = c(j) + 1
jump:
        NEXT j
        FOR k = 1 TO 5000: NEXT k
    NEXT i
WEND

