home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib23a.dsk / APRIL.1985 / TIME.TUTOR.bas < prev    next >
BASIC Source File  |  2023-02-26  |  8KB  |  131 lines

  1. 10  REM  **********************
  2. 20  REM  *     TIME.TUTOR     *
  3. 30  REM  *   BY FRANK SHIRK   *
  4. 40  REM  * COPYRIGHT (C) 1985 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * CONCORD, MA  01742 *
  7. 70  REM  **********************
  8. 80  REM 
  9. 90  GOTO 1110
  10. 100  REM  COMPUTE X,Y
  11. 110 AR = TH *DR:DX = R * COS(AR):DY = R * SIN(AR): RETURN 
  12. 120  REM  DRAW T$
  13. 130  FOR I = 1 TO  LEN(T$):N =  ASC( MID$ (T$,I,1)): IF N >47  AND N <91  THEN  DRAW N -47 AT X,Y
  14. 140 X = X +7: NEXT :Y = Y +9: RETURN 
  15. 150  REM  GET USER ANSWER
  16. 160 AN$ = ""
  17. 170  GET B$
  18. 180  FOR I = 1 TO 9: IF B$ = KL$(I)  THEN B$ = KW$(I): GOTO 300: REM  KEYWORD
  19. 190  NEXT 
  20. 200  IF B$ > = "0"  AND B$ < = "9"  THEN 300: REM  #S
  21. 210 B =  ASC(B$)
  22. 220  ON (B = 8) *1 +(B = 13) *2 +(B = 21) *3 +(B = 24) *4 +(B = 27) *5 +(B = 28) *6 GOTO 240,310,290,260,270,300
  23. 230 BZ = 10: GOSUB 930: GOTO 170: REM  DISABLE D KEYS
  24. 240  PRINT B$;: IF  LEN(A$) >1  THEN AN$ =  LEFT$(AN$, LEN(AN$) -1): GOTO 170
  25. 250  GOTO 160: REM  L ARROW
  26. 260  PRINT  CHR$(92);B$: GOTO 160: REM  CTRL X
  27. 270  IF OK  THEN  HCOLOR= 0: GOSUB 980: GOSUB 910: GOSUB 620: POP : POKE  -16303,0: GOTO 640: REM  ESC
  28. 280  GOTO 230
  29. 290 B$ =  CHR$( SCRN(  PEEK(36),2 * PEEK(37)) +16 * SCRN(  PEEK(36),2 * PEEK(37) +1) -128): REM  R ARROW
  30. 300  PRINT B$;:AN$ = AN$ +B$: GOTO 170
  31. 310  CALL  -868: PRINT : RETURN 
  32. 320  REM  COMPUTE CORRECT ANSWERS
  33. 330 C$(1) = HR$ +KW$(1) +MI$
  34. 340  FOR I = 2 TO 3:C$(I) = MI$ +KW$(I) +HR$: NEXT 
  35. 350  FOR J =  -1 TO 1:C%(J +1) = J +2: NEXT 
  36. 360  ON (MI = 0) *1 +(MI = 15) *2 +(MI = 30) *3 +(MI = 45) *4 +(MI >0  AND MI <10) *5 +(MI >30  AND MI < >45) *6 GOTO 380,390,400,410,420,430
  37. 370  GOTO 440
  38. 380 C$(13) = HR$ +KW$(9):J = 1:C%(J) = 13: GOTO 440
  39. 390  FOR I = 4 TO 5:C$(I) = KW$(4) +KW$(I -2) +HR$:J = J +1:C%(J) = I: NEXT : GOTO 440
  40. 400  FOR I = 6 TO 8:C$(I) = M1$ +KW$(I -1) +H1$:J = J +1:C%(J) = I: NEXT :C$(12) = KW$(8) +KW$(3) +HR$:J = J +1:C%(J) = 12: GOTO 440
  41. 410  FOR I = 6 TO 8:C$(I) = M1$ +KW$(I -1) +H1$:J = J +1:C%(J) = I:C$(I +3) = KW$(4) +KW$(I -1) +H1$:J = J +1:C%(J) = I +3: NEXT : GOTO 440
  42. 420 C$(1) = HR$ +KW$(1) +"0" +MI$: GOTO 440
  43. 430  FOR I = 6 TO 8:C$(I) = M1$ +KW$(I -1) +H1$:J = J +1:C%(J) = I: NEXT 
  44. 440 JX = J: RETURN 
  45. 450  REM  REMOVE BLANKS
  46. 460 A$ = "": FOR I = 1 TO  LEN(AN$):T$ =  MID$ (AN$,I,1): IF T$ < >" "  THEN A$ = A$ +T$
  47. 470  NEXT 
  48. 480  REM  USER ANSWER OK?
  49. 490  FOR J = 0 TO JX
  50. 500 T = 0:T1 =  LEN(C$(C%(J)))
  51. 510  FOR I = 1 TO  LEN(A$)
  52. 520 T1$ =  MID$ (A$,I,1)
  53. 530 T$ =  MID$ (C$(C%(J)),I +T,1)
  54. 540  IF T$ = T1$  THEN  NEXT I: ON (I +T -1 = T1) GOTO 570:T$ = ""
  55. 550  IF T$ = " "  THEN T = T +1: GOTO 530
  56. 560  NEXT J
  57. 570 OK = (T$ = T1$)
  58. 580  RETURN 
  59. 590  REM  DRAW #S AND CNTR
  60. 600  FOR I = 0 TO 14: DRAW N%(I) AT XN%(I),YN%(I): NEXT : FOR I =  -1 TO 1: HPLOT CX -1,CY -I TO CX +1,CY -I: NEXT : RETURN 
  61. 610  REM  DRAW HANDS
  62. 620 TH = BH:R = BR: FOR I = 1 TO 2: GOSUB 110: HPLOT CX,CY TO CX +DX,CY -DY:TH = LH:R = LR: NEXT : RETURN 
  63. 630  REM  INSTRUCTIONS
  64. 640  HOME : HTAB 13: PRINT "APPLE TIME TUTOR": HTAB 14: PRINT "BY FRANK SHIRK"
  65. 650  VTAB 4: PRINT "GIVE THE TIME WHEN ASKED.  USE NUMBERS  AND KEYWORDS.  EXAMPLE"
  66. 660  PRINT : HTAB 6: PRINT "12:00";: HTAB 19: PRINT "15"KW$(7)"5": HTAB 6: PRINT "12"KW$(9);: HTAB 18: PRINT KW$(4)KW$(5)"5"
  67. 670  PRINT : PRINT "6 LEVELS OF DIFFUCULTY ARE AVAILABLE.": PRINT : HTAB 11: PRINT "LEVEL  TIMES EVERY": POKE 32,12: PRINT 
  68. 680  FOR I = 1 TO 6: PRINT I: NEXT : VTAB 14: HTAB 7: POKE 32,18: PRINT " 1 HOUR": PRINT "30 MINUTES": PRINT "15 MINUTES": PRINT " 5 MINUTES": PRINT " 1  MINUTE": PRINT "      AUTO": POKE 32,0: PRINT 
  69. 690  VTAB 23: PRINT "** COPYRIGHT 1985 BY MICROSPARC, INC. **";: VTAB 24: PRINT "PRESS ESC KEY TO RETURN TO THIS PAGE";
  70. 700  IF   NOT L  THEN  HTAB 11: VTAB 21: INVERSE : PRINT "NOW WINDING UP CLOCK";: NORMAL : HCOLOR= 3: GOSUB 1040: GOSUB 600
  71. 710  HTAB 1: VTAB 21: CALL  -868: PRINT "WHICH LEVEL? (1-6, OR Q TO QUIT) ";: FLASH : PRINT " ";: NORMAL : GOSUB 1000:T$ =  CHR$(OP -128):OP =  VAL(T$): PRINT : IF (OP <1  OR OP >6)  AND T$ < >"Q"  THEN 710
  72. 720  IF   NOT OP  THEN 1310
  73. 730 L = OP: IF OP = 6  THEN L =  INT( RND(1) *5) +1:NR = 0:NW = 0
  74. 740  POKE  -16304,0: POKE  -16297,0: POKE  -16301,0
  75. 750  REM  COMPUTE TIME
  76. 760 T =  INT( RND(1) *X%(L)) +1: REM  TIME UNITS PAST 12:00
  77. 770 HR =  INT(T *12/X%(L)):HR$ =  STR$(HR +12 *(HR = 0)):H1$ =  STR$(HR +1 -12 *(HR = 12)): REM  HR & HR+1
  78. 780 MI = 720 *T/X%(L) -60 *HR:M1$ =  STR$(60 -MI):MI$ =  STR$(MI): IF MI = 0  THEN MI$ = MI$ +"0": REM  MIN TILL & AFTER
  79. 790 BH = 90 -6 *MI:LH = 90 -30 *HR -MI/2: REM  ANGLE OF HANDS
  80. 800  REM  MAIN LOOP
  81. 810  HOME :NT = 0:OK = 1: HCOLOR= 3: ROT= 0: GOSUB 910: GOSUB 620: GOSUB 600: GOSUB 330: VTAB 21
  82. 820  GOSUB 160: IF AN$ = ""  THEN 820
  83. 830  GOSUB 460: IF OK  THEN 860
  84. 840 NR = 0:NW = NW +1:BZ = 50: GOSUB 930: INVERSE : PRINT "NO": NORMAL :NT = NT +1: ROT= 32: GOSUB 980: IF NT >1  THEN  VTAB  PEEK(37): HTAB 11: PRINT "TIME IS "C$(C%( RND(1) *(JX +1)))
  85. 850  GOTO 820
  86. 860  FLASH : PRINT "OK": NORMAL : IF NT = 0  THEN NR = NR +1:NW = 0: FOR I = 0 TO 3: POKE 768,T%(I): POKE 769,D%(I): CALL 770: NEXT : GOSUB 980
  87. 870  PRINT : PRINT "PRESS ANY KEY TO CONTINUE";: GET T$: PRINT 
  88. 880  HCOLOR= 0: GOSUB 980: ROT= 0: IF OP = 6  AND (NR >RX  OR NW >WX)  THEN  GOSUB 910:L = L +(NR >RX) *(L <5) -(NW >WX) *(L >1):NR = 0:NW = 0
  89. 890  GOSUB 620: GOSUB 950:TR = TR +1:RT = RT +(NT = 0): HCOLOR= 3: GOSUB 950: GOTO 760
  90. 900  REM  DRAW LEVEL #
  91. 910  DRAW  ASC( STR$(L)) -47 AT 22,73: RETURN 
  92. 920  REM  BUZZ
  93. 930  FOR ZB = 1 TO BZ:S =  PEEK( -16336): NEXT : RETURN 
  94. 940  REM  DRAW TALLY
  95. 950 X = 50:Y = 9:T$ =  STR$(TR): GOSUB 130: IF NT = 0  THEN X = 50:T$ =  STR$(RT): GOSUB 130
  96. 960  RETURN 
  97. 970  REM  DRAW LIPS
  98. 980  DRAW 45 AT 257,139: RETURN 
  99. 990  REM  RANDOMIZE
  100. 1000  POKE  -16368,0: FOR I = 1 TO 10 ^8:J =  RND(1):OP =  PEEK( -16384): IF OP <128  THEN  NEXT 
  101. 1010  POKE  -16368,0
  102. 1020  RETURN 
  103. 1030  REM  DRAW BORDER
  104. 1040 X = 5:Y = 9:T$ = "TRIED": GOSUB 130:X = 5:T$ = "OK": GOSUB 130:X = 8:Y = 60:T$ = "LEVEL": GOSUB 130
  105. 1050 X = 5:Y = 124:T$ = "PRESS": GOSUB 130:X = 5:T$ = "ESC KEY TO": GOSUB 130:X = 5:T$ = "CHANGE LEVEL": GOSUB 130: REM  MSG
  106. 1060 Y = 0: FOR J = 0 TO 9:X = 232:T$ =  RIGHT$(KW$(J), LEN(KW$(J)) -(J >1)): GOSUB 130:Y = Y +2 *(J = 0): NEXT : DRAW 44 AT 238,Y -9: REM  KEYWORDS
  107. 1070 R = 20: FOR TH = 0 TO  -354  STEP  -15: GOSUB 110: HPLOT 257 +DX,129 -DY: NEXT :Y = 122: FOR T = 1 TO 2:X = 250: FOR I = 1 TO 2: FOR J =  -1 TO 2  STEP 3: HPLOT X +J,Y: NEXT J:X = 263: NEXT I:Y = 124: NEXT T: REM  HEAD
  108. 1080 R = CR:DT =  -6: FOR I = 1 TO 4: FOR TH = 0 TO  -354  STEP DT: GOSUB 110: HPLOT CX +DX,CY -DY: NEXT :R = R -1:DT =  -30: NEXT : REM  CLOCK
  109. 1090  RETURN 
  110. 1100  REM  SETUP
  111. 1110  SPEED= 255: HGR : TEXT : HOME : NORMAL : HOME : LOMEM: 16384: POKE 232,211: POKE 233,29: ROT= 0: SCALE= 1
  112. 1120  REM  LOAD SHAPE FILE
  113. 1130  PRINT  CHR$(4)"BLOAD TUTOR.SHAPES"
  114. 1140  DIM KW$(10),KL$(9),N%(15),XN%(15),YN%(15),X%(5),C$(13),C%(9),T%(4),D%(4)
  115. 1150  FOR I = 0 TO 9: READ KW$(I): NEXT :J = 1: FOR I = 1 TO 9:KL$(I) =  MID$ (KW$(I),J,1):J = 2: NEXT 
  116. 1160  FOR I = 0 TO 14: READ N%(I),XN%(I),YN%(I):N%(I) = N%(I) +1: NEXT 
  117. 1170  FOR I = 1 TO 5: READ X%(I): NEXT 
  118. 1180 J = 770: FOR I = J TO J +20: READ T: POKE I,T: NEXT 
  119. 1190  FOR I = 0 TO 3: READ T%(I),D%(I): NEXT 
  120. 1200 PI = 355/113:DR = 2 *PI/360
  121. 1210 CX = 144:CY = 79:CR = 75:BR = .90 *CR:LR = .67 *BR: REM  CLOCK CNTR,RAD AND LEN OF HANDS
  122. 1220 RX = 4:WX = 4
  123. 1230 RX = RX -1:WX = WX -1
  124. 1240  GOTO 640
  125. 1250  REM 
  126. 1260  DATA  "KEYWORD",":"," AFTER "," PAST "," QUARTER "," BEFORE "," TILL "," UNTIL "," HALF "," O'CLOCK"
  127. 1270  DATA  1,173,18,2,199,43,3,209,76,4,197,108,5,173,132,6,141,141,7,110,132,8,84,108,9,76,75,1,83,43,0,90,43,1,109,18,1,116,18,1,139,9,2,146,9: REM  CLOCK#,X,Y
  128. 1280  DATA  12,24,48,144,720: REM  TIMES/LEVEL
  129. 1290  DATA  173,48,192,136,208,5,206,1,3,240,9,202,208,245,174,0,3,76,2,3,96: REM  TONE ROUTINE
  130. 1300  DATA  153,80,153,30,153,30,102,75: REM  MUSIC
  131. 1310  HOME : END