|
|
View Message | Back to Messages |
Peter Swinkels Tue Dec 2 2025 at 11:42 am I wrote a simple "graphical" analog clock program in MSBasic->
10 DEFINT A-Z
20 DIM CLOCK$(20, 20)
30 PI# = 3.14159265358979#
40 DEF FNDISTANCE# (X1, Y1, X2, Y2) = SQR(ABS(X2 - X1) ^ 2 + ABS(Y2 - Y1) ^ 2)
50 DEF FNTORADIANS# (DG) = DG / (180 / PI#)
60 GOSUB 150
70 PREVIOUSTIME$ = TIME$
80 KEYSTROKE$ = ""
90 WHILE (KEYSTROKE$ = "")
100 IF NOT TIME$ = PREVIOUSTIME$ THEN GOSUB 150
110 PREVIOUSTIME$ = TIME$
120 KEYSTROKE$ = INKEY$
130 WEND
140 END
150 PRINT "Clock v1.00 - By: Peter Swinkels, ***2025***"
160 PRINT
170 HOURS# = VAL(LEFT$(TIME$, 2))
180 MINUTES# = VAL(MID$(TIME$, 4, 2))
190 SECONDS# = VAL(MID$(TIME$, 7, 2))
200 IF HOURS# > 12 THEN HOURS# = HOURS# - 12
210 HOURS# = FNTORADIANS#(((360 - (HOURS# * 30)) + 180) - (MINUTES# / 2))
220 MINUTES# = FNTORADIANS#((360 - (MINUTES# * 6)) + 180)
230 SECONDS# = FNTORADIANS#((360 - (SECONDS# * 6)) + 180)
240 FOR X = 0 TO 20
250 FOR Y = 0 TO 20
260 DISTANCE = FNDISTANCE#(10, 10, X, Y)
270 IF DISTANCE > 9 AND DISTANCE < 11 THEN CLOCK$(X, Y) = "*" ELSE CLOCK$(X, Y) = " "
280 NEXT Y
290 NEXT X
300 CLOCK$(10, 10) = "X"
310 X = (COS(HOURS#) * 4) + 10
320 Y = (SIN(HOURS#) * 4) + 10
330 BRUSH$ = "H"
340 GOSUB 510
350 X = (COS(MINUTES#) * 8) + 10
360 Y = (SIN(MINUTES#) * 8) + 10
370 BRUSH$ = "M"
380 GOSUB 510
390 X = (COS(SECONDS#) * 8) + 10
400 Y = (SIN(SECONDS#) * 8) + 10
410 BRUSH$ = "s"
420 GOSUB 510
430 FOR X = 0 TO 20
440 PRINT SPACE$(30);
450 FOR Y = 0 TO 20
460 PRINT CLOCK$(X, Y);
470 NEXT Y
480 PRINT
490 NEXT X
500 RETURN
510 STEPS = FNDISTANCE#(10, 10, X, Y)
520 FOR LENGTH = 0 TO STEPS
530 HANDX = X + (((10 - X) * LENGTH) / STEPS)
540 HANDY = Y + (((10 - Y) * LENGTH) / STEPS)
550 CLOCK$(HANDX, HANDY) = BRUSH$
560 NEXT LENGTH
570 RETURN
Yeah, I was kinda bored. ;-) It was both frustrating and yet a fun challenge working with the limitations of such an ancient BASIC (MSBasic 5.28 from 1983) interpreter. Because I'm not completely insane I wrote a draft in QuickBASIC which I then back-ported. ;-) Any feedback is welcome, however I intend to keep this program as simple as possible so probably no new features. Just bug fixes if needed.
|
|