home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib17.dsk / FLASHCARD.bas < prev    next >
BASIC Source File  |  2023-02-26  |  10KB  |  240 lines

  1. 10  REM  **********************
  2. 20  REM  *     FLASHCARD      *
  3. 30  REM  * BY  HARRY K. SUGAR *
  4. 40  REM  * COPYRIGHT (C) 1984 *
  5. 50  REM  * BY MICROSPARC, INC *
  6. 60  REM  * LINCOLN, MA. 01773 *
  7. 70  REM  **********************
  8. 80  IF  PEEK(104) = 76  THEN 110
  9. 90  POKE 103,1: POKE 104,76: POKE 19456,0
  10. 100  PRINT  CHR$(4);"RUN FLASHCARD"
  11. 110  GOTO 600
  12. 120  REM  -- SUBTRACTION --
  13. 130 N1 = N1 +N2:L1 =  LEN( STR$(N1))
  14. 140  GOSUB 200
  15. 150  HCOLOR= 0: IF L1 +L2 = 2  THEN  DRAW 11 AT 110,AY +40: HCOLOR= 3: DRAW 12 AT 110,AY +40
  16. 160  IF L1 +L2 >2  THEN  DRAW 11 AT 95,AY +40: HCOLOR= 3: DRAW 12 AT 95,AY +40
  17. 170 ANS = N1 -N2:LA =  LEN( STR$(ANS))
  18. 180  RETURN 
  19. 190  REM  -- ADDITION --
  20. 200  IF L1 +L2 = 2  THEN  DRAW N1 +(N1 = 0) *10 AT 140,AY: DRAW 11 AT 110,AY +40: DRAW N2 +(N2 = 0) *10 AT 140,AY +40: GOTO 250
  21. 210  IF L1 = 1  THEN  DRAW N1 +(N1 = 0) *10 AT 155,AY
  22. 220  IF L2 = 1  THEN  DRAW N2 +(N2 = 0) *10 AT 155,AY +40
  23. 230  DRAW 11 AT 95,AY +40: IF L1 = 2  THEN N1$ =  STR$(N1):NA =  VAL( LEFT$(N1$,1)):NB =  VAL( RIGHT$(N1$,1)): DRAW NA +(NA = 0) *10 AT 125,AY: DRAW NB +(NB = 0) *10 AT 155,AY
  24. 240  IF L2 = 2  THEN N2$ =  STR$(N2):NA =  VAL( LEFT$(N2$,1)):NB =  VAL( RIGHT$(N2$,1)): DRAW NA +(NA = 0) *10 AT 125,AY +40: DRAW NB +(NB = 0) *10 AT 155,AY +40
  25. 250 ANS = N1 +N2:LA =  LEN( STR$(ANS))
  26. 260  RETURN 
  27. 270  REM  -- MULTIPLICATION --
  28. 280  GOSUB 200
  29. 290  HCOLOR= 0: IF L1 +L2 = 2  THEN  DRAW 11 AT 110,AY +40: HCOLOR= 3: DRAW 13 AT 110,AY +40
  30. 300  IF L1 +L2 >2  THEN  DRAW 11 AT 95,AY +40: HCOLOR= 3: DRAW 13 AT 95,AY +40
  31. 310 ANS = N1 *N2:LA =  LEN( STR$(ANS))
  32. 320  RETURN 
  33. 330  REM  -- DIVISION --
  34. 340 N1 = N1 *N2:L1 =  LEN( STR$(N1)): IF N2 = 0  THEN N2 = 1
  35. 350  IF L1 +L2 = 2  THEN  DRAW N2 AT 95,EY: DRAW 15 AT 125,EY: DRAW N1 +(N1 = 0) *10 AT 155,EY: DRAW 16 AT 155,EY
  36. 360  IF L1 = 2  THEN N1$ =  STR$(N1):NA =  VAL( LEFT$(N1$,1)):NB =  VAL( RIGHT$(N1$,1))
  37. 370  IF L2 = 2  THEN N2$ =  STR$(N2):ND =  VAL( LEFT$(N2$,1)):NE =  VAL( RIGHT$(N2$,1))
  38. 380  IF L1 = 3  THEN N1$ =  STR$(N1):NA =  VAL( LEFT$(N1$,1)):NB =  VAL( MID$ (N1$,2,1)):NC =  VAL( RIGHT$(N1$,1))
  39. 390  GOSUB 470
  40. 400  IF L2 = 1  AND L1 = 2  THEN  DRAW N2 AT 80,EY: DRAW 15 AT 110,EY: DRAW NA AT 140,EY: DRAW 16 AT 140,EY: DRAW NB AT 170,EY: DRAW 16 AT 170,EY
  41. 410  IF L2 = 1  AND L1 = 3  THEN  DRAW N2 AT 65,EY: DRAW 15 AT 95,EY: DRAW NA AT 125,EY: DRAW 16 AT 125,EY: DRAW NB +(NB = 0) *10 AT 155,EY: DRAW 16 AT 155,EY: DRAW NC +(NC = 0) *10 AT 185,EY: DRAW 16 AT 185,EY
  42. 420  IF L2 = 2  AND L1 = 2  THEN  DRAW ND AT 65,EY: DRAW NE AT 95,EY: DRAW 15 AT 125,EY: DRAW NA AT 155,EY: DRAW 16 AT 155,EY: DRAW NB AT 185,EY: DRAW 16 AT 185,EY
  43. 430  IF L2 = 2  AND L1 = 1  THEN  DRAW ND AT 80,EY: DRAW NE AT 110,EY: DRAW 15 AT 140,EY: DRAW N1 +(N1 = 0) *10 AT 170,EY: DRAW 16 AT 170,EY
  44. 440  IF L2 = 2  AND L1 = 3  THEN  DRAW ND AT 50,EY: DRAW NE AT 80,EY: DRAW 15 AT 110,EY: DRAW NA AT 140,EY: DRAW 16 AT 140,EY: DRAW NB AT 170,EY: DRAW 16 AT 170,EY: DRAW NC AT 200,EY: DRAW 16 AT 200,EY
  45. 450 ANS = N1/N2:LA =  LEN( STR$(ANS)): GOSUB 530
  46. 460  RETURN 
  47. 470  IF NA = 0  THEN NA = 10
  48. 480  IF NB = 0  THEN NB = 10
  49. 490  IF NC = 0  THEN NC = 10
  50. 500  IF ND = 0  THEN ND = 10
  51. 510  IF NE = 0  THEN NE = 10
  52. 520  RETURN 
  53. 530 DY = EY -50: IF L1 +L2 = 2  THEN DX = 155: RETURN 
  54. 540  IF L2 = 1  AND L1 = 2  THEN DX = 200 -30 *LA: RETURN 
  55. 550  IF L2 = 1  AND L1 = 3  THEN DX = 215 -30 *LA: RETURN 
  56. 560  IF L2 = 2  AND L1 = 2  THEN DX = 215 -30 *LA: RETURN 
  57. 570  IF L2 = 2  AND L1 = 3  THEN DX = 230 -30 *LA: RETURN 
  58. 580  IF L2 = 2  AND L1 = 1  THEN DX = 200 -30 *LA: RETURN 
  59. 590  RETURN 
  60. 600  REM -- INITIALIZATION --
  61. 610  PRINT  CHR$(4);"BLOAD NUMBERS,A$4000"
  62. 620  POKE 232,0: POKE 233,64
  63. 630  HOME :EY = 58:AY = 18
  64. 640  DIM N1(50),N2(50),S1(50),S2(50)
  65. 650  DIM MS(40)
  66. 660 CO = 0:WR = 0
  67. 670  FOR I = 1 TO 7: READ OP$(I): NEXT 
  68. 680  DATA  "ADDITION","SUBTRACTION","ADDITION AND SUBTRACTION","MULTIPLICATION","DIVISION","MULTIPLICATION AND DIVISION","ALL FOUR"
  69. 690  INVERSE : HTAB 15: PRINT "FLASHCARD": NORMAL 
  70. 700  PRINT : PRINT : PRINT "THE OPTIONS ARE:": PRINT 
  71. 710  FOR I = 1 TO 7
  72. 720  PRINT : INVERSE : PRINT I;: NORMAL : PRINT " ";OP$(I)
  73. 730  NEXT : VTAB 23: PRINT "** COPYRIGHT 1983 BY MICROSPARC, INC. **";: VTAB 20
  74. 740  PRINT : PRINT : INPUT "WHICH OPTION DO YOU WANT?";A$
  75. 750 A =  VAL(A$): IF A <1  OR A >7  THEN  VTAB 22: CALL  -958: INPUT "CHOOSE A NUMBER FROM 1 TO 7:";A$: GOTO 750
  76. 760  HOME : VTAB 4: HTAB 12
  77. 770  PRINT "OK, LET'S PRACTICE": PRINT : HTAB (42 - LEN(OP$(A)))/2: INVERSE : PRINT OP$(A): NORMAL 
  78. 780  VTAB 10: PRINT "DO YOU WANT EASY ONES, HARD ONES,": INPUT "OR BOTH (TYPE E, H, OR B)?";B$
  79. 790  IF B$ = "E"  OR B$ = "H"  OR B$ = "B"  THEN 810
  80. 800  VTAB 15: CALL  -958: INPUT "ENTER E, H, OR B:";B$: GOTO 790
  81. 810  VTAB 20: IF B$ = "E"  THEN  PRINT "OK, LET'S PRACTICE EASY ONES.":BN = 7:CN = 0
  82. 820  IF B$ = "H"  THEN  PRINT "OK, LET'S PRACTICE HARD ONES.":BN = 6:CN = 7
  83. 830  IF B$ = "B"  THEN  PRINT "OK, LET'S PRACTICE BOTH.":BN = 13:CN = 0
  84. 840  FOR I = 1 TO 2000: NEXT I
  85. 850  HOME : POKE 34,20: HOME 
  86. 860  POKE 230,32: CALL 62450
  87. 870  SCALE= 1: ROT= 0: HCOLOR= 3
  88. 880  POKE  -16300,0: POKE  -16301,0: POKE  -16297,0
  89. 890  HOME 
  90. 900  FOR PROB = 1 TO 50
  91. 910  POKE  -16303,0: CALL 62450
  92. 920  POKE 35,22
  93. 930  HOME 
  94. 940  POKE 35,24
  95. 950 Z =  PEEK( -16368)
  96. 960 N1 =  INT( RND(1) *BN) +CN
  97. 970 L1 =  LEN( STR$(N1))
  98. 980 N2 =  INT( RND(1) *BN) +CN
  99. 990 L2 =  LEN( STR$(N2))
  100. 1000  IF A = 1  THEN P1 = 2:P2 = 2
  101. 1010  IF A = 2  THEN P1 = 2:P2 = 7
  102. 1020  IF A = 3  THEN P1 = 2:P2 =  INT( RND(1) *10)
  103. 1030  IF A = 4  THEN P1 = 7:P2 = 2
  104. 1040  IF A = 5  THEN P1 = 7:P2 = 7
  105. 1050  IF A = 6  THEN P1 = 7:P2 =  INT( RND(1) *10)
  106. 1060  IF A = 7  THEN P1 =  INT( RND(1) *10):P2 =  INT( RND(1) *10)
  107. 1070  IF P1 < = 4  AND P2 < = 4  THEN  GOSUB 200
  108. 1080  IF P1 < = 4  AND P2 > = 5  THEN  GOSUB 130
  109. 1090  IF P1 > = 5  AND P2 < = 4  THEN  GOSUB 280
  110. 1100  IF P1 > = 5  AND P2 > = 5  THEN  GOSUB 340: GOTO 1150
  111. 1110  IF L1 +L2 = 2  THEN  DRAW 14 AT 110,AY +80: DRAW 14 AT 140,AY +80
  112. 1120  IF L1 +L2 >2  THEN  DRAW 14 AT 95,AY +80: DRAW 14 AT 125,AY +80: DRAW 14 AT 155,98
  113. 1130 DY = AY +90: IF L1 +L2 = 2  THEN DX = 170 -30 *LA: GOTO 1150
  114. 1140  IF L1 +L2 >2  THEN DX = 185 -30 *LA
  115. 1150  POKE  -16304,0: REM  SW TO HIRES
  116. 1160  VTAB (23): HTAB (37):NO = CO +WR +1
  117. 1170  PRINT  SPC( 2 - LEN( STR$(NO)));NO
  118. 1180 ANS$ =  STR$(ANS)
  119. 1190 LA =  LEN(ANS$)
  120. 1200 TIME = 200
  121. 1210 G1 =  -1
  122. 1220 G2 =  -1
  123. 1230 G3 =  -1
  124. 1240  HCOLOR= 6
  125. 1250  FOR I = 1 TO TIME
  126. 1260 X =  PEEK( -16384): IF X <176  OR X >185  THEN X = 33
  127. 1270  IF G1 > = 0  THEN 1300
  128. 1280  IF X >127  THEN G1 = X:Y =  PEEK( -16368): DRAW G1 -176 +(G1 = 176) *10 AT DX,DY
  129. 1290  GOTO 1370
  130. 1300  IF LA = 1  THEN 1380
  131. 1310  IF G2 > = 0  THEN 1340
  132. 1320  IF X >127  THEN G2 = X:Y =  PEEK( -16368): DRAW G2 -176 +(G2 = 176) *10 AT DX +30,DY
  133. 1330  GOTO 1370
  134. 1340  IF LA = 2  THEN 1380
  135. 1350  IF G3 > = 0  THEN 1380
  136. 1360  IF X >127  THEN G3 = X:Y =  PEEK( -16368): DRAW G3 -176 +(G3 = 176) *10 AT DX +60,DY
  137. 1370  NEXT I
  138. 1380 G1$ =  STR$(G1 -176)
  139. 1390  HCOLOR= 3
  140. 1400 G2$ =  STR$(G2 -176)
  141. 1410 G3$ =  STR$(G3 -176)
  142. 1420 GUESS =  VAL(G1$)
  143. 1430  IF LA = 2  THEN GUESS =  VAL(G1$ +G2$)
  144. 1440  IF LA = 3  THEN GUESS =  VAL(G1$ +G2$ +G3$)
  145. 1450  VTAB 21
  146. 1460  IF ANS = GUESS  THEN  PRINT "THAT'S CORRECT!"; CHR$(7):CO = CO +1
  147. 1470  REM  CTRL G IN STATEMENT 1460
  148. 1480  IF ANS < >GUESS  THEN  PRINT "THAT'S WRONG!":WR = WR +1
  149. 1490  IF ANS < >GUESS  THEN N1(WR) = N1:N2(WR) = N2:S1(WR) = P1:S2(WR) = P2
  150. 1500  IF ANS < >GUESS  THEN  FOR I = 1 TO 20:X =  PEEK( -16336): NEXT I
  151. 1510  FOR I = 1 TO 300: NEXT I
  152. 1520  NEXT PROB
  153. 1530  TEXT 
  154. 1540  HOME : VTAB (9)
  155. 1550  PRINT "YOU GOT ";CO;" RIGHT AND ";WR;" WRONG."
  156. 1560 SC = CO/(CO +WR)
  157. 1570 SG =  INT(100 *SC +.5)
  158. 1580  PRINT : PRINT "YOUR SCORE IS ";SG;"."
  159. 1590  PRINT : PRINT : PRINT 
  160. 1600  GOSUB 1680
  161. 1610  IF SC > = .95  THEN  PRINT "THAT'S EXCELLENT! I'M PROUD OF YOU.     NOW YOU CAN PLAY A GAME.": GOTO 1660
  162. 1620  IF SC > = .9  THEN  PRINT "THAT'S VERY GOOD!  KEEP UP THE GOOD     WORK.  NOW YOU CAN PLAY A GAME.": GOTO 1660
  163. 1630  IF SC > = .8  THEN  PRINT "THAT'S GOOD!  YOU NEED JUST A LITTLE    MORE PRACTICE.": GOTO 1660
  164. 1640  IF SC > = .7  THEN  PRINT "YOU NEED SOME MORE PRACTICE.  LET ME    GIVE YOU THE PROBLEMS YOU GOT WRONG.    TYPE 'RUN PRACTICE' AND WE'LL SEE IF    YOU CAN DO BETTER.": GOTO 1660
  165. 1650  PRINT "COME ON, YOU CAN DO BETTER THAN THAT.   LET ME GIVE YOU THE PROBLEMS YOU GOT    WRONG.  TYPE 'RUN PRACTICE' AND WE'LL SEE IF YOU CAN DO BETTER."
  166. 1660  GOTO 1820
  167. 1670  END 
  168. 1680  IF WR = 0  THEN  RETURN 
  169. 1690 D$ =  CHR$(4)
  170. 1700  PRINT D$;"OPEN PROBLEMS"
  171. 1710  PRINT D$;"DELETE PROBLEMS"
  172. 1720  PRINT D$;"OPEN PROBLEMS"
  173. 1730  PRINT D$;"WRITE PROBLEMS"
  174. 1740  PRINT WR
  175. 1750  FOR J = 1 TO WR
  176. 1760  PRINT N1(J)
  177. 1770  PRINT N2(J)
  178. 1780  PRINT S1(J): PRINT S2(J)
  179. 1790  NEXT J
  180. 1800  PRINT D$;"CLOSE PROBLEMS"
  181. 1810  RETURN 
  182. 1820  PRINT : PRINT : PRINT "BEFORE YOU DO, LET ME SHOW YOU YOUR     PROGRESS."
  183. 1830  ONERR  GOTO 2330
  184. 1840 D$ =  CHR$(4)
  185. 1850  PRINT D$;"OPEN BMATHSTAT"
  186. 1860  PRINT D$;"READ BMATHSTAT"
  187. 1870  INPUT NS
  188. 1880  IF NS = 0  THEN 1920
  189. 1890  FOR Q = 1 TO NS
  190. 1900  INPUT MS(Q)
  191. 1910  NEXT Q
  192. 1920 NS = NS +1
  193. 1930  IF NS < = 40  THEN 1980
  194. 1940 NS = 40
  195. 1950  FOR W = 1 TO 39
  196. 1960 MS(W) = MS(W +1)
  197. 1970  NEXT W
  198. 1980 MS(NS) = SG
  199. 1990  PRINT D$;"DELETE BMATHSTAT"
  200. 2000  PRINT D$;"OPEN BMATHSTAT"
  201. 2010  PRINT D$;"WRITE BMATHSTAT"
  202. 2020  PRINT NS
  203. 2030  FOR Q = 1 TO NS
  204. 2040  PRINT MS(Q)
  205. 2050  NEXT Q
  206. 2060  PRINT D$;"CLOSE BMATHSTAT"
  207. 2070  HOME : GR 
  208. 2080  FOR P = 1 TO 3
  209. 2090  FOR Q = 1 TO NS
  210. 2100 SC$ =  STR$(MS(Q))
  211. 2110 CH$ =  MID$ (SC$,P,1)
  212. 2120  IF CH$ = ""  THEN CH$ = " "
  213. 2130  PRINT CH$;
  214. 2140  NEXT Q
  215. 2150  IF Q <41  AND P <3  THEN  PRINT 
  216. 2160  NEXT P
  217. 2170  IF Q <41  THEN  PRINT 
  218. 2180  FOR I = 0 TO NS -1
  219. 2190 MS =  INT(MS(I +1) *.39 +.5)
  220. 2200  IF I < = 14  THEN  COLOR= I +1
  221. 2210  IF I >14  AND I < = 29  THEN  COLOR= I -14
  222. 2220  IF I >29  THEN  COLOR= I -29
  223. 2230  IF MS = 0  THEN 2270
  224. 2240  FOR J = 39 TO 39 -MS  STEP  -1
  225. 2250  PLOT I,J
  226. 2260  NEXT J
  227. 2270  NEXT I
  228. 2280  PRINT "*** HIT THE RETURN KEY ***";
  229. 2290 X =  PEEK( -16368)
  230. 2300  GET SS$
  231. 2310  TEXT : HOME 
  232. 2320  END 
  233. 2330 D$ =  CHR$(4)
  234. 2340  PRINT D$;"DELETE BMATHSTAT"
  235. 2350  PRINT D$;"OPEN BMATHSTAT"
  236. 2360  PRINT D$;"WRITE BMATHSTAT"
  237. 2370  PRINT 0
  238. 2380  PRINT D$;"CLOSE BMATHSTAT"
  239. 2390  POKE 216,0
  240. 2400  GOTO 1840