' Program: Stars w/ Time
' Creator: Cloud Zimmermann
' Created: 1/7/2020

DECLARE SUB DrawDigit (d AS INTEGER, p AS INTEGER, x AS INTEGER, y AS INTEGER)
DECLARE SUB DrawClock (clock AS ANY)
CLS
SCREEN 7, 0, 0, 1

quit% = 0

TYPE StarType
    x AS INTEGER
    y AS INTEGER
    z AS INTEGER
    c AS INTEGER
END TYPE

TYPE ClockType
    x AS INTEGER
    y AS INTEGER
    t AS STRING * 12
    c AS INTEGER
    dx AS INTEGER
    dy AS INTEGER
END TYPE

DIM clock AS ClockType
clock.x = 5
clock.y = 5
clock.c = 8
clock.dx = 1
clock.dy = 1

count% = 30

DIM Star(1 TO count%) AS StarType

RANDOMIZE TIMER
FOR i% = 1 TO count%
    Star(i%).x = INT(RND * 320) + 1
    Star(i%).y = INT(RND * 200) + 1
    Star(i%).z = INT(RND * 4) + INT(RND * 1) + 1
    Star(i%).c = INT(RND * 16) + 1
NEXT i%



WHILE quit% = 0
    CLS
    IF INKEY$ <> "" THEN quit% = 1
 
    FOR i% = 1 TO count%
        Star(i%).y = Star(i%).y + Star(i%).z
        PSET (Star(i%).x, Star(i%).y), Star(i%).c
        IF Star(i%).y > 200 THEN Star(i%).y = Star(i%).y - 200
    NEXT i%

    'LOCATE 5, 5: COLOR 3
    'PRINT TIME$

    CALL DrawClock(clock)

    PCOPY 0, 1
    _LIMIT 60

WEND

SUB DrawClock (clock AS ClockType)
    clock.x = clock.x + clock.dx
    clock.y = clock.y + clock.dy

    tmp$ = TIME$
    FOR pointer% = 1 TO LEN(tmp$)
        digit% = VAL(MID$(tmp$, pointer%, 1))
        CALL DrawDigit(digit%, pointer%, clock.x, clock.y)
    NEXT pointer%

    'PSET (clock.x, clock.y), clock.c

    IF clock.x <= 0 OR clock.x >= 320 - 46 THEN clock.dx = -clock.dx
    IF clock.y <= 0 OR clock.y >= 200 - 6 THEN clock.dy = -clock.dy
END SUB

SUB DrawDigit (d AS INTEGER, p AS INTEGER, x AS INTEGER, y AS INTEGER)
    tmp$ = "BC11M" + STR$(x) + "," + STR$(y) + " BM+" + STR$(5 * p) + ",0"
    IF d = 1 THEN tmp$ = tmp$ + "BM+3,0D4"
    IF d = 2 THEN tmp$ = tmp$ + "R3D2L3D2R3"
    IF d = 3 THEN tmp$ = tmp$ + "R3D2L3R3D2L3"
    IF d = 4 THEN tmp$ = tmp$ + "D2R3U2D4"
    IF d = 5 THEN tmp$ = tmp$ + "BM+3,0L3D2R3D2L3"
    IF d = 6 THEN tmp$ = tmp$ + "BM+3,0L3D4R3U2L3"
    IF d = 7 THEN tmp$ = tmp$ + "R3D4"
    IF d = 8 THEN tmp$ = tmp$ + "R3D4L3U4D2R3"
    IF d = 9 THEN tmp$ = tmp$ + "R3L3D2R3U2D4"
    IF d = 0 THEN tmp$ = tmp$ + "R3D4L3U4"
    DRAW tmp$
END SUB

