This program is an interactive clock-reading tutorial aimed at young learners, teaching how to tell time at the hour, half hour, quarter past, quarter of, and minutes. It draws an analog clock face using PLOT, DRAW, and CIRCLE commands, positioning hour numerals with trigonometric functions and rendering clock hands with precomputed delta-x/delta-y vector pairs. Eleven sets of User Defined Graphics (UDGs “a” through “m”) are loaded via POKE USR loops, providing decorative clock imagery and animated characters for the title screen. The program tracks a student’s name, uses a correct-answer counter to offer the answer after three failed attempts, and plays a short fanfare with BEEP sequences on correct responses.
Program Analysis
Program Structure
The program is organized into several logical sections connected by GO TO and GO SUB:
- Lines 1–4: Title/intro fanfare and tape-stop prompt.
- Lines 5–145: Core clock-drawing subroutines (numeral placement, hand drawing, hour-hand calculation).
- Lines 200–560: Utility subroutines for clock setup, minute-hand selection, and keypress waits.
- Lines 600–610: Wait-for-C loop that branches to the main menu.
- Lines 800–1599: UDG initialization — eleven UDGs (“a” through “m”) are loaded via
POKE USRloops readingDATAstatements. - Lines 1600–1999: Title/intro screen with animated UDG clock, name entry, and arc-drawing.
- Lines 2000–2097: Parents/teachers information screen and main menu (modes 1–5).
- Lines 3000–6040: Mode setup — sets
c, minute-hand vectors, and time label stringt$for each mode. - Lines 7000–7999: Practice loop — renders the clock, accepts numeric input, validates, gives feedback and fanfare.
- Lines 8000–8750: Hour-hand angle lookup table and hand-drawing dispatch subroutine.
- Lines 9000–9230: Animated title screen with UDG art, BEEP melody, and name prompt.
- Lines 9900–9999: Error handling and
SAVE.
UDG Initialization
Lines 800–1599 define thirteen UDGs. Each uses a standard pattern: RESTORE to the relevant DATA line, a FOR loop from 0 to 7, READ into a variable, and POKE USR "x"+n to write the byte. The UDGs and their apparent roles are:
| UDG | Approximate Shape/Use |
|---|---|
"l" | Top bar of clock border |
"m" | Bottom bar of clock border |
"a" | Upper-left clock corner piece |
"b" | Upper-right clock corner piece |
"c" | Lower-left clock corner piece |
"d" | Lower-right clock corner piece |
"e"–"k" | Dithered/fill patterns and clock face segments used in title screen art |
"f", "g" | Left and right edge pieces of the round clock frame |
"h", "j" | Upper-left and upper-right curved segments |
"i", "k" | Lower-left and lower-right curved segments |
The UDG data includes alternating dither patterns (e.g., BIN 01110101, BIN 10101010) used to simulate shading on the clock face in the title screen.
Clock Face Drawing
Hour numerals are placed on the clock face using trigonometry at lines 20–30 (small clock) and 1850–1870 (large clock):
PRINT AT 7-6*COS(q/6*PI), 7+7*SIN(q/6*PI); q
This maps each hour q (1–12) to screen row/column using a circular formula, with the cosine term controlling vertical position and sine controlling horizontal. The clock outline itself is drawn with CIRCLE.
Hand Vector Precomputation
Rather than computing hand positions with trigonometry at runtime for each draw, the program uses precomputed integer delta-x / delta-y pairs stored in variables (ldx, ldy for the long/minute hand; sdx, sdy for the short/hour hand). For modes 1–3.5, these are fixed per mode (set in lines 3000–5090). For mode 4 (minutes), subroutine 510 assigns them via a chain of IF l=n THEN LET ... statements for l values 1–11 (representing 5-minute intervals excluding 12 o’clock). Each hand is drawn as a two-segment line: the main vector, a one-pixel offset for width, and then the reverse vector to avoid leaving artifacts.
Angle Lookup Table (Lines 8010–8700)
The hour-hand angle t used in subroutine 115 is determined by a large dispatch table (lines 8010–8670). For each hour (1–12), four precomputed radian values are stored as oc (o’clock), hp (half past), qp (quarter past), and qt (quarter to/of). The correct one is selected at lines 8701–8711 based on mode c. For minutes mode (c=4), the angle is further refined by the value of n (the minute count), approximating the hour hand’s intermediate position.
Mode Variable c
The program’s behavior is controlled by a single variable c:
| Value | Mode |
|---|---|
| 1 | Clock hours (o’clock) |
| 2 | Half hours |
| 3 | Quarter past |
| 3.5 | Quarter of/to |
| 4 | Minutes |
Using 3.5 as a floating-point sentinel to distinguish “quarter of” from “quarter past” is an unusual idiom; comparisons use IF c=3.5 and IF c>3.5 to route execution correctly.
Input Validation
At line 7512, user input is validated character-by-character to ensure only digits were entered:
FOR i=1 TO LEN a$: IF a$(i)<"0" OR a$(i)>"9" THEN GO TO 7510: NEXT i
This guards against non-numeric entries before VAL a$ is used. An empty string also causes a re-prompt (line 7511).
Error Handling
The program uses ON ERR GO TO 9910 defensively at several points. The handler at line 9910 calls ON ERR RESET, pauses briefly, then reinstates the error trap and calls ON ERR CONTINUE, attempting to resume gracefully after any runtime error.
Feedback and Scoring
Correct answers clear the counter cnt and play a BEEP fanfare (the same sequence used in the intro). An animated UDG sequence (lines 7814–7820) alternates between UDG pairs \a\b and \c\d ten times. After three consecutive wrong answers in minutes mode (cnt=3), the correct answer is displayed automatically and the counter resets. Random encouragement messages (“NICE WORK!”, “VERY GOOD!”, “GOOD JOB!”) are selected using 1+INT(RND*3).
Notable Anomalies
- Lines 3040, 4040, 5040, 5090, and 6040 each contain an unreachable
GO TOafterGO TO 7000— these are dead code, likely leftovers from editing. - Line 128 contains
IF h=(h*5), which is only true whenh=0. Sincehis set as an integer 1–12, this condition is never true and the branch to line 140 is never taken, making the double-draw at line 140 unreachable from this path. - Line 8655 duplicates the assignment
LET qp=4.584893from line 8654 with no effect. - Line 8714 reads
IF h=12 OR 6 THEN GO TO 8718. In Sinclair BASIC,OR 6evaluates as a numeric OR (nonzero = true), so this condition is always true, meaning theLET py=py-1at line 8715 and theGO TO 8717are never reached. - Lines 200–210 call
GO SUB 5andGO SUB 110, but line 110 does not exist;GO SUB 115is the intended target. This is a likely bug that would cause a runtime error.
Content
Source Code
1 REM TIME TEACHER 1
2 BEEP .1,10: BEEP .1,10: BEEP .25,6: BEEP .5,2: BEEP .25,8: BEEP .1,10: BEEP .1,10
3 PRINT AT 10,8; INK 1; FLASH 1;"STOP THE TAPE": LET cnt=0: INK 0: GO TO 800
4 STOP
5 CLS : REM set up for sm clock
7 ON ERR GO TO 9910
10 LET px=63: LET py=116
15 FOR q=1 TO 12
20 PRINT AT 7-6*COS (q/6*PI),7+7*SIN (q/6*PI);q
30 NEXT q
40 IF c=4 THEN GO SUB 510: PLOT px,py: DRAW sdx,sdy: DRAW 0,-1: DRAW -sdx,-sdy
50 PLOT px,py: DRAW sdx,sdy: DRAW 0,-1: DRAW -sdx,-sdy
51 LET px=px-1
54 GO SUB 8000: GO SUB 8010
60 INK 0: PRINT AT 2,15;"WHAT TIME IS IT?"
65 IF c>1 THEN GO TO 74
70 PRINT AT 4,15;"IT IS _": PRINT AT 6,18;t$;"."
72 GO TO 80
74 IF c=4 THEN GO TO 78
75 PRINT AT 4,18;"IT IS ": PRINT AT 6,16;t$;" _."
76 GO TO 80
78 PRINT AT 4,18;"IT IS _": PRINT AT 6,16;t$;" AFTER "
79 PRINT AT 7,20;h;" O'CLOCK"
80 PRINT AT 9,16;"PRESS THE RIGHT"
81 IF c=4 THEN GO TO 85
82 PRINT AT 11,18;"NUMBER FROM"
83 PRINT AT 13,20;"1 to 12."
84 GO TO 90
85 PRINT AT 11,18;"NUMBERS FROM"
87 PRINT AT 13,20;"5 to 55."
90 PRINT AT 15,15;"THEN PRESS ENTER."
105 REM set up for HOUR hand
115 LET a=t*11
120 LET sx=30*SIN a: LET sy=30*COS a
122 LET kx=px: LET ky=py
125 CIRCLE px,py-1,2
126 PLOT kx,ky
127 DRAW sx,sy
128 IF h=(h*5) THEN GO TO 140
135 RETURN
140 DRAW sx,sy
145 RETURN
200 GO SUB 5
210 GO SUB 110
400 RETURN
500 IF INKEY$="c" THEN GO TO 2009
502 IF INKEY$="C" THEN GO TO 2009
505 GO TO 500
510 LET m=h
512 LET l=1+INT (RND*11)
515 LET n=(l*5)
517 IF l=1 THEN LET ldx=25: LET ldy=40: LET sdx=23: LET sdy=35
518 IF l=2 THEN LET ldx=45: LET ldy=30: LET sdx=36: LET sdy=23
521 IF l=3 THEN LET ldx=50: LET ldy=0: LET sdx=45: LET sdy=0
523 IF l=4 THEN LET ldx=45: LET ldy=-29: LET sdx=33: LET sdy=-16
525 IF l=5 THEN LET ldx=27: LET ldy=-50: LET sdx=23: LET sdy=-35
527 IF l=6 THEN LET ldx=0: LET ldy=-48: LET sdx=-2: LET sdy=-41
529 IF l=7 THEN LET ldx=-28: LET ldy=-48: LET sdx=-32: LET sdy=-34
531 IF l=8 THEN LET ldx=-45: LET ldy=-27: LET sdx=-42: LET sdy=-18
533 IF l=9 THEN LET ldx=-50: LET ldy=0: LET sdx=-48: LET sdy=0
535 IF l=10 THEN LET ldx=-45: LET ldy=30: LET sdx=-35: LET sdy=20
537 IF l=11 THEN LET ldx=-27: LET ldy=45: LET sdx=-31: LET sdy=35
540 RETURN
550 IF INKEY$="c" THEN RETURN
552 IF INKEY$="C" THEN RETURN
555 ON ERR GO TO 9910
560 GO TO 550
600 IF INKEY$="c" THEN GO TO 2000
602 IF INKEY$="C" THEN GO TO 2000
605 ON ERR GO TO 9910
610 GO TO 600
800 RESTORE 830
810 FOR n=0 TO 7
820 READ l
825 POKE USR "l"+n,l
830 DATA BIN 11111111,BIN 00000000,BIN 00000000,BIN 00000000,BIN 00111100,BIN 11111111,BIN 11111111,BIN 11111111
847 NEXT n
850 RESTORE 870
855 FOR n=0 TO 7
860 READ m
865 POKE USR "m"+n,m
870 DATA BIN 00000000,BIN 00000000,BIN 00000000,BIN 00000000,BIN 00000000,BIN 00000000,BIN 00000000,BIN 11111111
899 NEXT n
900 RESTORE 930
910 FOR n=0 TO 7
920 READ a
925 POKE USR "a"+n,a
930 DATA BIN 00000111,BIN 00011000,BIN 00110000,BIN 11000000,BIN 00000000,BIN 00000011,BIN 00001111,BIN 00011111
970 NEXT n
1000 RESTORE 1030
1010 FOR n=0 TO 7
1020 READ b
1024 POKE USR "b"+n,b
1030 DATA BIN 11100000,BIN 00011100,BIN 00000111,BIN 00000000,BIN 00000000,BIN 11000000,BIN 11110000,BIN 11111000
1070 NEXT n
1110 RESTORE 1130
1115 FOR n=0 TO 7
1120 READ c
1125 POKE USR "c"+n,c
1130 DATA BIN 00000000,BIN 00000000,BIN 00000000,BIN 00000000,BIN 00000000,BIN 11100000,BIN 00110000,BIN 00001111
1170 NEXT n
1200 RESTORE 1230
1215 FOR n=0 TO 7
1220 READ d
1225 POKE USR "d"+n,d
1230 DATA BIN 00000000,BIN 00000000,BIN 00000000,BIN 00000000,BIN 00000000,BIN 00000111,BIN 00001100,BIN 11110000
1270 NEXT n
1300 RESTORE 1320
1305 FOR n=0 TO 7
1310 READ e
1315 POKE USR "e"+n,e
1320 DATA BIN 01110101,BIN 10101010,BIN 01110101,BIN 10101010,BIN 01110101,BIN 10101010,BIN 01110101,BIN 10101010
1335 NEXT n
1350 RESTORE 1370
1355 FOR n=0 TO 7
1360 READ f
1365 POKE USR "f"+n,f
1370 DATA BIN 11111010,BIN 11110101,BIN 11111010,BIN 11110101,BIN 11111010,BIN 11110101,BIN 11111010,BIN 11010101
1385 NEXT n
1400 RESTORE 1420
1405 FOR n=0 TO 7
1410 READ g
1415 POKE USR "g"+n,g
1420 DATA BIN 01011111,BIN 10101111,BIN 01011111,BIN 10101111,BIN 01011111,BIN 10101111,BIN 01011111,BIN 10101111
1445 NEXT n
1450 RESTORE 1470
1455 FOR n=0 TO 7
1460 READ h
1465 POKE USR "h"+n,h
1470 DATA BIN 11010101,BIN 11101010,BIN 11010100,BIN 11101000,BIN 11010000,BIN 11100000,BIN 11000000,BIN 11000000
1485 NEXT n
1500 RESTORE 1520
1507 FOR n=0 TO 7
1510 READ i
1515 POKE USR "i"+n,i
1520 DATA BIN 00000011,BIN 00000101,BIN 00001010,BIN 00010101,BIN 00101010,BIN 01010101,BIN 10101010,BIN 01010101
1535 NEXT n
1550 RESTORE 1570
1555 FOR n=0 TO 7
1560 READ j
1565 POKE USR "j"+n,j
1570 DATA BIN 10101010,BIN 01010101,BIN 00101010,BIN 00010101,BIN 00001010,BIN 00000101,BIN 00000010,BIN 00000011
1585 NEXT n
1586 RESTORE 1590
1587 FOR n=0 TO 7
1588 READ k
1589 POKE USR "k"+n,k
1590 DATA BIN 10000000,BIN 11000000,BIN 10100000,BIN 11010000,BIN 10101000,BIN 11010100,BIN 10101010,BIN 11010101
1599 NEXT n
1600 GO TO 9000
1700 REM Clock set-up
1710 CLS
1712 LET px=79: LET py=83
1715 LET h=xl
1718 LET xl=xl+1: IF xl=13 THEN LET xl=1
1727 IF c=4 THEN GO SUB 510: IF n>=40 AND n<=55 THEN LET h=h-1: IF h=0 THEN LET h=12
1730 PRINT AT 0,5;"WHAT DO YOU SEE ?"
1731 PRINT AT 0,5; OVER 1;"____ __ ___ ___ "
1740 PRINT AT 2,13;"IT IS A CLOCK WITH"
1750 PRINT AT 4,19;"LINES CALLED"
1760 PRINT AT 6,18;"HANDS POINTING"
1765 IF c=4 THEN GO TO 1780
1770 PRINT AT 8,20;"AT ";h;" & ";m
1775 GO TO 1785
1780 PRINT AT 8,20;"AT ";h;" & ";l
1785 PRINT AT 10,20;"THE LONGER"
1790 PRINT AT 12,20;"HAND IS THE"
1795 PRINT AT 6,18; OVER 1;"_____"
1798 PRINT AT 14,20; OVER 1;"______"
1800 PRINT AT 14,20;"MINUTE HAND;"
1805 PRINT AT 14,20; OVER 1;"______"
1810 PRINT AT 16,20;"THE SHORTER"
1812 PRINT AT 18,21;"HAND IS"
1815 PRINT AT 20,18;"THE HOUR HAND."
1825 PRINT AT 20,22; OVER 1;"____"
1850 FOR k=1 TO 12
1860 PRINT AT 11-8*COS (k/6*PI),9+8*SIN (k/6*PI);k
1870 NEXT k
1875 GO SUB 8010
1880 IF c=4 THEN GO TO 1942
1890 LET px=79: LET py=83
1900 PLOT px,py
1910 DRAW ldx,ldy: DRAW -1,0: DRAW ldx,-ldy
1944 LET px=79: LET py=83
1946 IF c<>4 THEN GO TO 1960
1952 PLOT px,py: DRAW ldx,ldy: DRAW -1,0: DRAW -ldx,-ldy
1960 CIRCLE 76,83,73
1965 IF c>1 THEN GO TO 1972
1970 PAUSE 100: PRINT AT VAL "21",VAL "0";"IT IS ";h;" ";t$;"."
1971 GO TO 1985
1972 IF c>3.5 THEN GO TO 1975
1973 PAUSE 100: PRINT AT VAL "21",VAL "0";"IT IS ";t$;" ";h;"."
1974 GO TO 1985
1975 PAUSE 100: PRINT AT VAL "21",VAL "0";"IT IS ";n;" ";t$;" AFTER ";h;"."
1985 PAUSE 100: PRINT AT VAL "16",VAL "7"; FLASH 1;"PRESS C"
1990 GO TO 550
2000 REM "MENU"
2001 PAPER 5: BORDER 5: CLS
2005 PRINT AT 1,5;"PARENTS AND TEACHERS:",,," THIS MATERIAL IS DESIGNED TO BE USED AS AN ACTIVITY UNIT IN KINDERGARTEN THROUGH GRADE THREE.",,,," SUCH ACTIVITY MAY REQUIRE ASSISTANCE IN READING DIRECTIONS.",,,," SLOWLY READ THE MATERIAL TO THOSE WHO NEED ASSISTANCE. EACH TIME LEVEL MAY BE REPEATED AS OFTEN AS NEEDED!",,," HAVE A GOOD TIME!!"
2006 PRINT AT 20,5;"PRESS C TO CONTINUE"
2007 GO SUB 550
2009 CLS
2010 PRINT AT VAL "1",VAL "5";"WHAT WOULD YOU LIKE"
2020 PRINT AT VAL "2",VAL "6";"TO WORK ON TODAY?"
2025 PRINT AT 4,18;n$
2030 PRINT AT 5,2;"PRESS "
2035 PRINT AT 7,6;"(1) FOR CLOCK HOURS"
2040 PRINT AT 9,6;"(2) FOR HALF HOURS"
2043 PRINT AT 11,6;"(3) FOR QUARTER PAST"
2045 PRINT AT 13,6;"(4) FOR QUARTER OF"
2051 PRINT AT 15,6;"(5) FOR MINUTES"
2055 ON ERR GO TO 9910
2060 IF INKEY$="1" THEN GO TO 3000
2065 IF INKEY$="2" THEN GO TO 4000
2070 IF INKEY$="3" THEN GO TO 5000
2080 IF INKEY$="4" THEN GO TO 5050
2090 IF INKEY$="5" THEN GO TO 6000
2097 GO TO 2060
3000 LET c=1
3005 LET m=12
3010 LET ldx=0: LET ldy=48
3015 LET sdx=0: LET sdy=41
3030 LET t$="O'CLOCK"
3040 GO TO 7000: GO TO 3040
4000 LET c=2: LET m=6
4010 LET ldx=0: LET ldy=-48
4015 LET sdx=0: LET sdy=-41
4030 LET t$="HALF PAST"
4040 GO TO 7000: GO TO 4020
5000 LET c=3: LET m=3
5010 LET ldx=30: LET ldy=0
5015 LET sdx=45: LET sdy=0
5030 LET t$="QUARTER PAST"
5040 GO TO 7000: GO TO 5040
5050 LET c=3.5: LET m=9
5060 LET ldx=-30: LET ldy=0
5070 LET sdx=-45: LET sdy=0
5080 LET t$="QUARTER OF"
5090 GO TO 7000: GO TO 5090
6000 LET c=4
6030 LET t$="MINUTES"
6040 GO TO 7000: GO TO 6040
7000 CLS
7010 PRINT AT 4,5;"PRESS A FOR EXAMPLES"
7015 PRINT AT 6,5;"PRESS B FOR PRACTICE"
7017 PRINT AT 8,5;"PRESS E FOR NEW TIME"
7020 IF INKEY$="a" THEN GO TO 7100
7022 IF INKEY$="A" THEN GO TO 7100
7030 IF INKEY$="b" THEN GO TO 7500
7032 IF INKEY$="B" THEN GO TO 7500
7035 IF INKEY$="e" THEN GO TO 2009
7037 IF INKEY$="E" THEN GO TO 2009
7040 GO TO 7020
7100 GO SUB 1700
7110 GO SUB 7000
7200 RETURN
7500 GO SUB 5
7510 INPUT a$: IF LEN a$>38 THEN GO TO 7510
7511 IF LEN a$=0 THEN GO TO 7510
7512 FOR i=1 TO LEN a$: IF a$(i)<"0" OR a$(i)>"9" THEN GO TO 7510: NEXT i
7513 LET a=VAL a$
7515 IF c=4 THEN IF a=n THEN LET cnt=0: GO TO 7850
7520 IF a=h THEN LET cnt=0: GO TO 7800
7530 GO TO 7900
7800 PRINT AT 14,1;" "
7801 PRINT AT 15,1;" "
7803 IF c>1 THEN GO TO 7805
7804 PRINT AT 16,6;" IT IS ";h;" ";t$;"."
7805 GO TO 7808
7806 IF c=4 THEN GO TO 7850
7807 PRINT AT 16,6;" IT IS ";t$;" ";h;"."
7808 PAPER 5: PRINT AT 19,1;"** THAT IS CORRECT "; FLASH 1;n$; FLASH 0;" **"
7809 BEEP .1,10: BEEP .1,10: BEEP .25,6: BEEP .5,2: BEEP .25,8: BEEP .1,10: BEEP .1,10
7810 LET e=1+INT (RND*3): IF e=1 THEN PRINT AT 14,1;" NICE WORK!": GO TO 7814
7811 IF e=2 THEN PRINT AT 14,1;" VERY GOOD!": GO TO 7814
7813 PRINT AT 14,1;" GOOD JOB!"
7814 FOR f=1 TO 10
7815 PRINT AT 5,5;"\a\b \a\b"
7816 PAUSE 10
7817 PRINT AT 5,5;"\c\d \c\d"
7819 PAUSE 10
7820 NEXT f
7840 GO TO 7000
7850 PRINT AT 15,4;" "
7860 PRINT AT 17,2;" IT IS ";n;" ";t$;" AFTER ";h;"."
7870 GO TO 7808
7900 BEEP 1,0: BEEP 1.5,-10
7902 PRINT AT 15,4;" "
7905 IF c=4 THEN LET cnt=cnt+1
7910 IF cnt<3 THEN GO TO 7930
7915 IF cnt=3 THEN PRINT AT 17,2;" IT IS ";n;" ";t$;" AFTER ";h;".": LET cnt=0: PRINT AT 20,5;"PRESS C TO CONTINUE": GO TO 500
7930 LET q=1+INT (RND*2): IF q=1 THEN PRINT AT 14,1;" MAYBE NEXT TRY "; FLASH 1;n$: GO TO 7940
7935 PRINT AT 14,1;" Try Again "; FLASH 1;n$
7940 GO TO 7510
7999 REM *******
8000 LET h=1+INT (RND*12)
8005 RETURN
8010 IF h=1 THEN GO TO 8100
8020 IF h=2 THEN GO TO 8150
8030 IF h=3 THEN GO TO 8200
8035 IF h=4 THEN GO TO 8250
8040 IF h=5 THEN GO TO 8300
8045 IF h=6 THEN GO TO 8350
8050 IF h=7 THEN GO TO 8400
8055 IF h=8 THEN GO TO 8450
8060 IF h=9 THEN GO TO 8500
8065 IF h=10 THEN GO TO 8550
8070 IF h=11 THEN GO TO 8600
8075 IF h=12 THEN GO TO 8650
8100 LET oc=5.7595865
8105 LET qp=-2.2252948
8110 LET hp=2.3561954
8115 LET qt=1.1780972
8120 GO TO 8700
8150 LET oc=5.2359878
8155 LET qp=3.5342917
8160 LET hp=1.8325957
8165 LET qt=.65449847
8170 GO TO 8700
8200 LET oc=4.712389
8205 LET qt=.13089969
8210 LET hp=1.3089969
8215 LET qp=-3.2724923
8220 GO TO 8700
8250 LET oc=4.1887902
8255 LET qp=2.4870942
8260 LET hp=.78539816
8265 LET qt=5.8904862
8270 GO TO 8700
8300 LET oc=3.6651914
8305 LET qt=5.3668874
8310 LET hp=-6.0213859
8315 LET qp=1.9634954
8320 GO TO 8700
8350 LET oc=3.1415927
8355 LET qt=4.8432887
8360 LET hp=4.3196899
8365 LET qp=1.4398966
8370 GO TO 8700
8400 LET oc=-.78539816
8410 LET hp=-2.4870942
8415 LET qt=2.6179939
8416 LET qp=5.5
8420 GO TO 8700
8450 LET oc=2.0943951
8455 LET qt=3.7960911
8460 LET hp=-1.3089969
8465 LET qp=.39269908
8470 GO TO 8700
8500 LET oc=1.5707963
8505 LET qp=6.1522856
8510 LET hp=-1.8325957
8515 LET qt=3.2742923
8520 GO TO 8700
8550 LET oc=1.0471976
8555 LET qp=5.6286868
8560 LET hp=-2.3561954
8565 LET qt=2.7488936
8570 GO TO 8700
8600 LET oc=.52359878
8605 LET qt=2.2252948
8610 LET hp=-2.8797933
8615 LET qp=5.1050881
8620 GO TO 8700
8650 LET oc=6.2831853
8654 LET qp=4.584893
8655 LET qp=4.584893
8660 LET hp=2.8797933
8665 LET qt=1.701696
8670 GO TO 8700
8700 REM
8701 IF c=1 THEN LET t=oc
8702 IF c=2 THEN LET t=hp
8703 IF c=3 THEN LET t=qp
8704 IF c=3.5 THEN LET t=qt
8705 IF c<4 THEN GO TO 8712
8708 IF n=5 THEN LET t=oc
8709 IF n>=10 AND n<=20 THEN LET t=qp
8710 IF n>=25 AND n<=35 THEN LET t=hp
8711 IF n>=40 AND n<=55 THEN LET t=qt: LET h=h-1: IF h=0 THEN LET h=12
8712 GO SUB 115
8713 LET py=py-1
8714 IF h=12 OR 6 THEN GO TO 8718
8715 LET py=py-1
8717 GO TO 8720
8718 LET px=px+1
8720 GO SUB 115
8750 RETURN
9000 CLS : PRINT AT 3,1;"HI,",,,,"I AM",," YOUR",," TIME",,"TEACHER"
9007 PRINT AT 0,7;"\f\e\e\e\e\e\e\e\e\e\e\e\e\e\e\e\g"
9010 PRINT AT 1,7;"\f\e\e\e\e\e\h \j\e\e\e\e\g"
9020 PRINT AT 2,7;"\f\e\e\h \j\e\e\g"
9030 PRINT AT 3,7;"\f\e\h \j\e\g"
9040 PRINT AT 4,7;"\f\h \j\g"
9045 FOR q=5 TO 9
9050 PRINT AT q,7;"\f \g"
9055 NEXT q
9060 PRINT AT 10,7;"\f\k \i\g"
9070 PRINT AT 11,7;"\f\e\k \i\e\g"
9075 PRINT AT 12,7;"\f\e\e\k \i\e\e\g"
9080 PRINT AT 13,7;"\f\e\e\e\e\k \i\e\e\e\e\g"
9085 FOR q=14 TO 16
9090 PRINT AT q,7;"\f\e\e\e\e\e\e\e\e\e\e\e\e\e\e\e\g"
9095 NEXT q
9100 PRINT AT 18,1;"\* 1983 GAMES TO LEARN BY"
9101 PRINT AT 20,5;"Author Charles L. Damon"
9105 PRINT AT 5,12;"\a\l\b \c\m\d"
9110 CIRCLE 120,116,1: CIRCLE 135,116,1
9115 PLOT 100,100: DRAW 55,0,1: DRAW -27,0,1: DRAW -27,0,-1
9120 OVER 1
9125 FOR q=1 TO 12
9130 PRINT AT 7-6*COS (q/6*PI),15+7*SIN (q/6*PI);q
9135 NEXT q
9140 OVER 0
9145 FOR p=0 TO 1
9150 PRINT AT 5,12;"\c\m\d ": BEEP .35,2: PRINT AT 5,15;" \a\l\b": BEEP .30,7
9155 PRINT AT 5,12;"\a\l\b": BEEP .30,9: PRINT AT 5,15;" \c\m\d": BEEP .30,11
9160 PRINT AT 5,12;"\c\m\d": BEEP .5,9: PRINT AT 5,15;" \a\l\b": BEEP .35,5
9165 PRINT AT 5,12;"\a\l\b": BEEP .35,2: PRINT AT 5,15;" \c\m\d": BEEP .30,7
9170 PRINT AT 5,12;"\c\m\d": BEEP .30,9: PRINT AT 5,15;" \a\l\b": BEEP .3,11
9180 PRINT AT 5,12;"\a\l\b \c\m\d": BEEP .9,9
9185 NEXT p
9190 PRINT AT 5,12;"\a\l\b \a\l\b"
9194 PAUSE 200
9195 PRINT AT 18,1;"WHAT IS YOUR "; FLASH 1;"NAME?"; FLASH 0;" "
9200 PRINT AT 20,0;"ENTER YOUR NAME THEN PRESS ENTER"
9205 INPUT n$: LET n$=n$+" "
9210 PRINT AT 18,0;" "
9215 PRINT AT 20,0;" "
9220 PRINT AT 21,2;n$;", PRESS C please!"
9225 LET xl=1
9230 GO TO 600
9900 STOP
9910 ON ERR RESET
9920 PAUSE 100
9930 ON ERR GO TO 9910
9940 ON ERR CONTINUE
9999 SAVE "time1" LINE 1
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
