home *** CD-ROM | disk | FTP | other *** search
/ Jason Aller Floppy Collection / IBM PS2 Educational Programs / IBM PS2 Education Programs.img / MADNESS.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1987-08-04  |  33.0 KB  |  1,100 lines

  1. 8  DEF SEG=0:PROTECTION=PEEK(&H9C)+(PEEK(&H9D)*256):POKE &H4FF,&HCF:POKE &H6C,&HFF:POKE &H6D,4:POKE &H6E,0:POKE &H6F,0
  2. 9  DEF SEG=PEEK(&H9E)+(PEEK(&H9F)*256):CALL PROTECTION
  3. 1000  'Matrix Madness - A pattern recognition exercise
  4. 1010  '(C) Copyright IBM Corporation 1984
  5. 1020  'Version 1 July 15, 1984
  6. 1030  CLEAR ,,1024
  7. 1040  KEY OFF
  8. 1050  FOR I%=1 TO 10:KEY I%,"":NEXT
  9. 1060  DEFINT A-Q,S-Z
  10. 1065  GOSUB 3750:'Graphics setup
  11. 1070  GOSUB 4400:'Title Screen
  12. 1080  GOSUB 3848:'Initialization
  13. 1090  GOSUB 13220:'Read hall of fame
  14. 1100  '
  15. 1200  SEED = VAL(MID$(TIME$,4,2))+60*VAL(MID$(TIME$,7,2)) 
  16. 1210  RANDOMIZE(SEED)
  17. 1220  '
  18. 1230  GOSUB 4490:'Introduction screen
  19. 1240  'Ask for demo or play; Wait 30 seconds, start demo
  20. 1250  PAUSE=2:'Enable pause
  21. 1260  SEC=60:GOSUB 2800:IF SEC = 0 THEN GOSUB 1910:IF A$=ESC$ THEN GOTO 1230:'F2 is only other Return, start drill
  22. 1300  'Start the drill
  23. 1310  '********** Main Routine **********
  24. 1320  GOSUB 4860:'Ask for playing level
  25. 1330  IF A$=ESC$ THEN GOTO 1230
  26. 1340  PAUSE=0:'Disable pause
  27. 1350  TPTS = 0:TOT=0
  28. 1360  IR=IPL:GOSUB 6000:IR=INT(50*RND):FOR I=1 TO IPL:PRB(I)=N(I)+IR:NEXT:'combos to use
  29. 1370  FOR IP= 1 TO IPL
  30. 1380   CLRU = CLR:'Use color setting for this problem
  31. 1390   CLS:GOSUB 7630:'Clear and make noise
  32. 1400   GOSUB 5200:'Generate problem and alternatives
  33. 1410   GOSUB 6100:'Display problem and alternatives
  34. 1420   GOSUB 6500:'Display answer request, init pts and time
  35. 1430   GOSUB 6620:'Write PTS
  36. 1440   WHILE PTS>0
  37. 1450    A$=INKEY$:'See if key pressed
  38. 1460    'None, check time; else, see if answer and handle.
  39. 1470    IF LEN(A$)>0 THEN GOSUB 6800:A$=INKEY$:A$=INKEY$
  40. 1480    IF PTS>0 THEN GOSUB 3700
  41. 1490   WEND
  42. 1500  GOSUB 7800:'Show Answer (Fill in, also mark alternative)
  43. 1510  GOSUB 8000:'Await to continue
  44. 1520  NEXT IP
  45. 1530  GOSUB 7200:'Write game ended panel
  46. 1540  GOTO 1250:'Go wait and either start demo or this again.
  47. 1550  IF SL=1 THEN COLOR 15,0:ELSE IF SL=2 THEN COLOR 11,0:ELSE COLOR 13,0
  48. 1560  IF SL=1 THEN PRINT"Level 1 (Beginner)"
  49. 1570  IF SL=2 THEN PRINT"Level 2 (Intermediate)"
  50. 1580  IF SL=3 THEN PRINT"Level 3 (Advanced)"
  51. 1590  COLOR 7,0
  52. 1600  RETURN:'Go wait and either start demo or this again.
  53. 1610  CT=-1:SCREEN 0,1:COLOR 7,0:CLS:LOCATE 1,15:COLOR 11,0:PRINT"Matrix Madness":RETURN
  54. 1620  '******** End of main routine ********
  55. 1700  '
  56. 1710  ' Used for Renumbering
  57. 1720  ON I GOSUB 1200,1300,1700,1900,2800,3300,3400,3500,3700,4400,5200
  58. 1730  ON I GOSUB 5600,6000,6100,6500,6600,6700,6800,7100,7200,7400,7800,8000,8200
  59. 1740  ON I GOSUB 8300,8400,8500,8600,8700,8800,10800,11800,11900,12000,12300
  60. 1750  ON I GOSUB 12700,13200,13400,13800,14000,14200,14300,14400
  61. 1760  ON I GOSUB 14440,14590,14660,14760
  62. 1770  ' Reference items for renumbering purposes
  63. 1780  GOSUB 8500:' Routine to mark x over bad quess.
  64. 1790  GOSUB 8800:' routine used for making box contents
  65. 1800  GOSUB 11800:' data points for square centers
  66. 1810  GOSUB 11900:' data points used for how screen looks
  67. 1820  GOSUB 12300:' Variable descriptions
  68. 1830  '
  69. 1900  '********** DEMONSTRATION **********
  70. 1910  'Run the demo until ESC key is pressed.
  71. 1920  PAUSE = 1
  72. 1930  FOR SL=1 TO 3
  73. 1940  TPTS = 0:TOT=0
  74. 1950  IR=IPL:GOSUB 6000:IR=INT(50*RND):FOR I=1 TO IPL:PRB(I)=N(I)+IR:NEXT:'combos to use
  75. 1960   FOR IP=1 TO IPL
  76. 1970   CLRU = CLR:'Use color setting for this problem
  77. 1980    GOSUB 5200:'Generate Problem
  78. 1990    GOSUB 6100:'Display problem
  79. 2000    'Generate order answers will be tried
  80. 2010    IR=AT:GOSUB 6000:'Make random order
  81. 2020    IA=0:'Answer being worked on
  82. 2030    LOCATE 1,1:PRINT"Demonstration";:I=1:J=1:NC=13:GOSUB 2590
  83. 2040    LOCATE 23,1:PRINT" Just watch! ";:I=1:J=23:NC=13:GOSUB 2590
  84. 2050    LOCATE 25,1:PRINT"Press Esc to exit, F10 to pause.";:I=1:J=25:NC=39:GOSUB 2590
  85. 2060    GOSUB 6500:'Display answer request, set pts.
  86. 2070    LOCATE 23,24:PRINT" What:  Looking";:I=24:J=23:NC=15 :GOSUB 2590
  87. 2080    SEC=3+SS*2:'Override time
  88. 2090    IF PTS<3+SEC THEN SEC=PTS
  89. 2100    WHILE SEC>0
  90. 2110     GOSUB 3400:'Wait 1 Second
  91. 2120     IF A$=ESC$ THEN RETURN
  92. 2130     GOSUB 6600:'Update display
  93. 2140     IF PTS=0 THEN GOSUB 7100:GOTO 2390
  94. 2150    WEND
  95. 2160    LOCATE 23,24:PRINT"  Selected one ";:I=24:J=23:NC=15 :GOSUB 2590
  96. 2170    IF SEC=0 THEN IA=IA+1:G$=MID$(ANS$,N(IA),1):'Make an answer
  97. 2180    LOCATE 22,34:PRINT G$;
  98. 2190    SEC=2
  99. 2200    WHILE SEC>0
  100. 2210     GOSUB 3400:IF A$=ESC$ THEN RETURN
  101. 2220     I=34:J=22:NC=1:GOSUB 2590
  102. 2230     IF G$<>C$ THEN GOSUB 6600:'Update display
  103. 2240    WEND
  104. 2250    SEC=2
  105. 2260    WHILE SEC>0
  106. 2270     GOSUB 3400:IF A$=ESC$ THEN RETURN
  107. 2280     IF G$<>C$ THEN GOSUB 6600:'Update display
  108. 2290    WEND
  109. 2300    A$=G$
  110. 2310    GOSUB 6800:'Check answer, update display.
  111. 2320    SEC=2
  112. 2330    WHILE SEC>0
  113. 2340     GOSUB 3400:IF A$=ESC$ THEN RETURN
  114. 2350     IF PTS>0 THEN GOSUB 6600:'Update display
  115. 2360    WEND
  116. 2370    IF PTS>0 THEN GOTO 2070:'If bad, try again
  117. 2380   '
  118. 2390    GOSUB 7800:'Display answer
  119. 2400    SEC=10:GOSUB 7910:'Prepare to blink answer
  120. 2410    WHILE SEC>0
  121. 2420     GOSUB 7950:'Wait 1 Second and blink answer
  122. 2430     IF A$=ESC$ THEN RETURN
  123. 2440     IF A$=F10$ THEN GOSUB 3130
  124. 2450    WEND
  125. 2460   NEXT IP
  126. 2470  '  Pause for a moment between levels
  127. 2480  GOSUB 7400:'Write demo set ended, with score.
  128. 2490  SEC=10
  129. 2500  PAUSE=2
  130. 2510    GOSUB 2800
  131. 2520    IF SEC>0  THEN RETURN
  132. 2530  PAUSE=1
  133. 2540  NEXT SL
  134. 2550  GOTO 1930:'Loop till forced out
  135. 2560  '********** End of Demo Routine **********
  136. 2570  '
  137. 2580  '
  138. 2590  'Inverse video an area, do max of 40 characters
  139. 2600  GOSUB 8400:'get x and y given row i, column j
  140. 2610  GET(X,Y)-(X+NC*8-1,Y+7),IVA
  141. 2620  PUT (X,Y),IVA,PRESET
  142. 2630  RETURN
  143. 2640  'Save contents of an area, max of 80 characters
  144. 2650  I=1:J=25:NC=40:GOSUB 8400:'get x and y given row i, column j
  145. 2660  GET (X,Y)-(X+NC*8-1,Y+7),IVB
  146. 2670  RETURN
  147. 2680  'Restore contents of an area
  148. 2690  GOSUB 8400:'get x and y given row i, column j
  149. 2700  PUT (X,Y),IVB,PSET
  150. 2710  RETURN
  151. 2800  'Delay for intro & between demo's
  152. 2810  '
  153. 2820  IF CT=0 THEN GOTO 2900
  154. 2830  'Text 1 Case
  155. 2840    COLOR 0,13
  156. 2850    LOCATE 24,1:PRINT" Press F1 to demo.  Press F2 to play.  ";
  157. 2860    LOCATE 25,1:PRINT" Press F9 to quit.  Press F10 to pause.";
  158. 2870    COLOR 7,0
  159. 2880   GOTO 2920
  160. 2890  'Graphics case
  161. 2900    LOCATE 24,1:PRINT" Press F1 to demo.  Press F2 to play.";:I=1:J=24:NC=39:GOSUB 2590
  162. 2910    LOCATE 25,1:PRINT" Press F9 to quit.  Press F10 to pause.";:I=1:J=25:NC=39:GOSUB 2590
  163. 2920  WHILE SEC>0
  164. 2930   GOSUB 3400:'Wait one second
  165. 2940   IF A$=F2$ THEN A$="":RETURN
  166. 2950   IF A$=F1$ THEN SEC=0:RETURN
  167. 2960   IF LEN(A$)>0 THEN RETURN
  168. 2970   'LOCATE 22,3:PRINT SEC;" ";
  169. 2980  WEND
  170. 2990  RETURN
  171. 3000  'Pause routine, any key exits it
  172. 3010  '
  173. 3020  IF CT=0 THEN GOSUB 2640:LOCATE 25,1:PRINT" Pausing.  Press Enter to resume.      ";:I=1:J=25:NC=39:GOSUB 2590
  174. 3030  IF CT   THEN LOCATE 25,1:COLOR 0,13:PRINT" Pausing.  Press Enter to resume.      ";:COLOR 7,0
  175. 3040  A$=INKEY$
  176. 3050  IF A$=ENT$ THEN GOTO 3080
  177. 3060  IF PAUSE=2 AND (A$=F1$ OR A$=F2$) THEN GOTO 3080
  178. 3070  GOTO 3040
  179. 3080  IF CT=0 THEN I=1:J=25:GOSUB 2680:RETURN:'Restore old message,return
  180. 3090    COLOR 0,13
  181. 3100    IF PAUSE=1 THEN LOCATE 25,1:PRINT" Press Esc to exit, F10 to pause.      ";
  182. 3110   IF PAUSE=2 THEN  LOCATE 25,1:PRINT" Press F9 to quit.  Press F10 to pause.";
  183. 3120  RETURN
  184. 3130  'Pause routine, blink demo answer any key exits it
  185. 3140  GOSUB 2640:'Save old message
  186. 3150  LOCATE 25,1:PRINT" Pausing.  Press Enter to resume.      ";:I=1:J=25:NC=39:GOSUB 2590
  187. 3160  GOSUB 7950:'Blink answer, perhaps get a key returned instead.
  188. 3170  IF A$=ENT$ THEN GOTO 3190
  189. 3180  GOTO 3160
  190. 3190  GOSUB 2680:'Restore old message
  191. 3200  RETURN
  192. 3300  'Pure delay of one second, no keyboard check
  193. 3310  P$=RIGHT$(TIME$,2):IF P$=PP$ THEN 3310 ELSE PP$=P$:SEC=SEC-1:RETURN
  194. 3400  'Delay of one second, check pauses and sound
  195. 3410  GOSUB 3500:'Go wait a second or till a key is pressed.
  196. 3420  IF PAUSE=2 AND A$=F9$ THEN GOSUB 13800:SYSTEM
  197. 3430  IF PAUSE>0 AND A$=F10$ THEN GOSUB 3000
  198. 3440  IF PAUSE=2 AND (A$=F1$ OR A$=F2$) THEN RETURN
  199. 3450  IF A$=F4$ THEN CLR=NOT CLR:GOSUB 7540:GOTO 3410
  200. 3460  IF A$=ESC$ THEN RETURN
  201. 3470  IF LEN(A$)>0 THEN GOTO 3410:'Ignore other items, go wait again.
  202. 3480  RETURN
  203. 3500  'Delay of one second or till a key is pressed
  204. 3510  A$=INKEY$:IF LEN(A$)>0 THEN 3550
  205. 3520  P$=RIGHT$(TIME$,2)
  206. 3530  IF P$=PP$ THEN 3510
  207. 3540  PP$=P$:SEC=SEC-1:RETURN
  208. 3550  IF A$=F3$ THEN SND=NOT SND:GOSUB 7720:IF PANEL=2 THEN GOSUB 5040:GOTO 3510: ELSE GOTO 3510
  209. 3560  IF A$=F4$ THEN CLR=NOT CLR:GOSUB 7690:IF PANEL=2 THEN GOSUB 5040:GOTO 3510: ELSE GOTO 3510
  210. 3570  GOSUB 7540:RETURN:'Return all other key strokes
  211. 3580  'See if reasonable answer
  212. 3590  FOR I=1 TO AT:IF MID$(ANS$,I,1)=A$ THEN RETURN
  213. 3600  NEXT I
  214. 3610  I=0:RETURN
  215. 3700  'Check elapsed time timer, adjust pts if needed.
  216. 3710  ETIME! = FNT!
  217. 3720  WHILE ETIME!>STIME!+1:PTS = PTS-1:STIME!=STIME!+1:LOCATE 24,34:IF PTS>0 THEN PRINT PTS;:WEND
  218. 3730  IF PTS=0 THEN LOCATE 24,27:PRINT"          ";:GOSUB 7100:'Time out
  219. 3740  RETURN
  220. 3750  'Check to see if running with color adapter
  221. 3760  DEF SEG=0:PRINT" ";
  222. 3770  IF (PEEK(&H410) AND (&H30))<>&H30 THEN GOTO 3830:'Equip flag says we have it.<UNK! {FF00}>TAB(+COLOR36666'Now see if have it with monochrome.
  223. 3780  DEF SEG=&HB800:POKE 0,254:IF PEEK(0)=254 THEN GOTO 3830:'Yes, have it with monochrome, go switch.
  224. 3790  LOCATE 10,1:PRINT"Matrix Madness cannot run."
  225. 3800  PRINT:PRINT"The color adapter card is not available."
  226. 3820  PRINT:DEF SEG:SYSTEM
  227. 3830  'Set flag on for using only color
  228. 3840  DEF SEG=0:POKE &H410,(PEEK(&H410) AND &HCF) OR &H20:DEF SEG
  229. 3842  'TOP
  230. 3843  SCREEN 1,1,0,0
  231. 3844  WIDTH 40:LOCATE ,,1,6,7
  232. 3846  RETURN
  233. 3848  'Initialization
  234. 3850  X=0:Y=0:C=0:SX=0:CLRB=0:CLRB2=0:XW=0:YW=0:I=0:J=0
  235. 3860  DIM SS(3),J,M,LST(3,32),N(32),R(32)
  236. 3870  RESTORE 11800
  237. 3875  PLAY "MBO2 L4C L8ECEP8 L4C L8EGEP8 L4E L8GEGP8 L4ECE
  238. 3880  FOR I=1 TO 5:READ CI(I):NEXT
  239. 3890  FOR J=1 TO 3:READ CJ(J):NEXT
  240. 3900  RESTORE 11900
  241. 3910  '*** read patter layouts
  242. 3920  READ NL:DIM SP(NL,3,3),NG(NL)
  243. 3930  FOR I=1 TO NL
  244. 3940    READ SP(I,0,0):READ NG(I)
  245. 3950    FOR K=1 TO 3:FOR M=1 TO 3:READ SP(I,K,M):NEXT:NEXT
  246. 3960  NEXT I
  247. 3970  '*** Read valid combinations of icons
  248. 3980  RESTORE 12020
  249. 3990  DIM DV(6),DS(6):'Read number of each kind
  250. 4000  DA = 1
  251. 4010  FOR I=1 TO 6
  252. 4020    DS(I)=DA
  253. 4030    READ DV(I)
  254. 4040    DA=DA+DV(I)
  255. 4050  NEXT
  256. 4060  DIM NV(DA-1,3):'Read icon comb.
  257. 4070  RESTORE 12060
  258. 4080  FOR I=1 TO DA-1
  259. 4090   FOR J=1 TO 3
  260. 4100     READ NV(I,J)
  261. 4110   NEXT J
  262. 4120  NEXT I
  263. 4130  DIM IVA(324),IVB(324),IVC(324):'For inverse video generation, 644 bytes
  264. 4140  IPL=10:'Number of problems per series
  265. 4150  DIM PRB(IPL):'Randomly choose combos
  266. 4160  ESC$=CHR$(27)
  267. 4170  ENT$=CHR$(13)
  268. 4180  F1$=CHR$(0)+CHR$(59):F2$=CHR$(0)+CHR$(60)
  269. 4190  F3$=CHR$(0)+CHR$(61)
  270. 4200  F4$=CHR$(0)+CHR$(62)
  271. 4210  F5$=CHR$(0)+CHR$(63)
  272. 4220  F9$=CHR$(0)+CHR$(67):F10$=CHR$(0)+CHR$(68)
  273. 4230  ANS$="123456":'Answer labels and possible answers
  274. 4240  SND=-1:'Sound switch defaults on
  275. 4250  CLR= -1:'Color switch defaults on
  276. 4270  DEF FNT!=3600*VAL(LEFT$(TIME$,2))+60*VAL(MID$(TIME$,4,2))+VAL(RIGHT$(TIME$,2))
  277. 4280  'Read in bit patterns for symbols
  278. 4300  RETURN
  279. 4400  'Title
  280. 4410  PANEL=0:CT=-1:CLS:SCREEN 0,1:COLOR 11,0:WIDTH 40:LOCATE 12,14:PRINT"Matrix Madness"
  281. 4420  LOCATE 18,4,0: PRINT"(C) Copyright IBM Corporation 1984"
  282. 4430  SEC=0:'Init takes 4 seconds, no wait
  283. 4440  WHILE SEC>0
  284. 4450   GOSUB 3300
  285. 4460  WEND
  286. 4470  RETURN
  287. 4480  'Introduction
  288. 4490  PANEL=1:CT=0:CLS:SCREEN 1,0
  289. 4495  LOCATE 1,15:POKE &H4E,1:PRINT"Matrix Madness";:POKE &H4E,3
  290. 4500  LOCATE 3,1
  291. 4510  PRINT"The Challenge: "
  292. 4520  PRINT"    Make a choice to complete the";
  293. 4530  PRINT"    pattern as quickly as you can."
  294. 4540  PRINT"    Correct choices win points."
  295. 4550  PRINT"    Ten Problems per set.               ";
  296. 4560  PRINT" "
  297. 4570  LOCATE 13,1:PRINT"Sample"
  298. 4580  LOCATE 14,1:PRINT"Problem:             Choices:   ";
  299. 4590  LOCATE 11,31:PRINT MID$(ANS$,1,1);
  300. 4600  LOCATE 14,31:PRINT MID$(ANS$,2,1);
  301. 4610  LOCATE 17,31:PRINT MID$(ANS$,3,1);
  302. 4620  RESTORE 11830
  303. 4630  FOR I=1 TO 5:READ CI(I):NEXT
  304. 4640  FOR J=1 TO 3:READ CJ(J):NEXT
  305. 4650  XW=CI(2)-CI(1):X=CI(1)-XW/2:YW=CJ(2)-CJ(1):Y=CJ(1)-YW/2
  306. 4660  FOR I=0 TO 3
  307. 4670   LINE (X+I*XW,Y)-(X+I*XW,Y+YW*3)
  308. 4680   LINE (X+I*XW,Y)-(X+I*XW+1,Y+YW*3),,B
  309. 4690   LINE (X,Y+I*YW)-(X+3*XW,Y+YW*I)
  310. 4700  NEXT
  311. 4710  FOR I=1 TO 4:FOR J=1 TO 3:IF (I<>3) OR (J<>2) THEN C=J:X=CI(I):Y=CJ(J):GOSUB 4820
  312. 4720  NEXT:NEXT
  313. 4730  LOCATE 19,37:PRINT"The";
  314. 4740  LOCATE 20,35:PRINT"Answer";
  315. 4750  LOCATE 14,35:PRINT"<";
  316. 4760  LINE (300,107)-(301,140),,B
  317. 4770  LINE (272,107)-(300,107)
  318. 4780  RESTORE 11800
  319. 4790  FOR I=1 TO 5:READ CI(I):NEXT
  320. 4800  FOR J=1 TO 3:READ CJ(J):NEXT
  321. 4810  RETURN
  322. 4820  IF C=1 THEN LINE (X-3,Y)-(X+4,Y+1),2,B
  323. 4830  IF C=2 THEN LINE (X,Y-3)-(X+1,Y+4),2,B
  324. 4840  IF C=3 THEN LINE (X,Y-3)-(X+1,Y+4),2,B:LINE(X-3,Y)-(X+4,Y+1),2,B
  325. 4850  RETURN
  326. 4860  'Select playing level.
  327. 4870  PANEL=2:GOSUB 1610:'Write heading
  328. 4880  COLOR 7,0:GOSUB 5040:'Display color/sound status
  329. 4890  COLOR 7,0:LOCATE 11,1:PRINT"Choose:"
  330. 4900  FOR SL=1 TO 3
  331. 4910   LOCATE 11+SL,9:GOSUB 1550
  332. 4920  NEXT
  333. 4930  LOCATE 16,11:COLOR 7,0:PRINT "Type 1, 2, or 3:  ";
  334. 4940  LOCATE 25,1:COLOR 0,13:PRINT" Press Esc to exit ";
  335. 4950  COLOR 7,0:LOCATE 16,29,1::SEC=30:GOSUB 3500:'Try for the key
  336. 4960  IF LEN(A$)=0 THEN 4950
  337. 4970  IF A$=ESC$ THEN RETURN
  338. 4980  SL=VAL(A$)
  339. 4990  IF SL=0 THEN A$ = "?"
  340. 5000  LOCATE 16,29,0:COLOR 13,0:PRINT A$;" ";
  341. 5010  IF SL=0 THEN GOTO 4950
  342. 5020  COLOR 7,0:LOCATE 18,1:PRINT"You are playing at ";:GOSUB 1550:SEC=3:WHILE SEC>0:GOSUB 3500:WEND:RETURN
  343. 5030  RETURN
  344. 5040  'Display Color status
  345. 5050  LOCATE 4,1,0
  346. 5060  COLOR 7,0:PRINT"Sound:";:LOCATE ,16:PRINT"Press F3 to Change";:LOCATE ,9
  347. 5070  IF SND = -1 THEN COLOR 11,0:PRINT"ON ";
  348. 5080  IF SND = 0 THEN  COLOR 13,0:PRINT"OFF";
  349. 5090  PRINT:PRINT
  350. 5100  COLOR 7,0:PRINT"Color:";:LOCATE ,16:PRINT"Press F4 to Change";:LOCATE ,9
  351. 5110  IF CLR = -1 THEN COLOR 11,0:PRINT"ON ";
  352. 5120  IF CLR = 0 THEN  COLOR 13,0:PRINT"OFF";
  353. 5130  COLOR 7,0:LOCATE 15,13
  354. 5140  RETURN
  355. 5200  'Generate a problem
  356. 5210  TOT = TOT + 1
  357. 5220  IF CLRU=0 THEN NUMVAL=DS(SL)+PRB(IP) MOD DV(SL):ELSE NUMVAL=DS(SL+3)+PRB(IP) MOD DV(SL+3)
  358. 5230  FOR I = 1 TO 3:SS(I)=NV(NUMVAL,I):NEXT
  359. 5240  'Select what distribution and which subpatterns
  360. 5250  P(1)=1+INT(RND*NL):P(2)=P(1):P(3)=P(1):IF SL=1 OR SL=4 THEN 5290
  361. 5260  WHILE NG(P(1))=NG(P(2)):P(2)=1+INT(RND*NL):WEND
  362. 5270  IF SL=2 OR SL=5 THEN 5290
  363. 5280  WHILE NG(P(1))=NG(P(3)) OR NG(P(2))=NG(P(3)):P(3)=1+INT(RND*NL):WEND
  364. 5290  FOR SS=1 TO SL
  365. 5300   NN(SS)=SP(P(SS),0,0)
  366. 5310   IR=NN(SS):GOSUB 6000:'Generate a random order
  367. 5320   FOR I=1 TO 3:FOR J=1 TO 3
  368. 5330    SQ(SS,I,J)=N(SP(P(SS),I,J))
  369. 5340   NEXT:SQ(SS,I,0)=N(I):NEXT
  370. 5350  NEXT SS
  371. 5360  'Need to eliminate any duplicates
  372. 5370  QI=1+INT(3*RND):QJ=1+INT(3*RND):'Square to guess
  373. 5380  'Avoid center square on patterns where it is confusing.
  374. 5390  IF QI=2 AND QJ=2 THEN FOR I=1 TO SL:IF NG(P(I))>5 THEN 5370:ELSE:NEXT
  375. 5400  GOSUB 5600:'Generate possible answers
  376. 5410  IF AT>6 THEN AT=6
  377. 5420  IR=AT:GOSUB 6000:'Generate a random list
  378. 5430  K=0:'Put solutions onto board
  379. 5440  FOR I=4 TO 5:FOR J=1 TO 3
  380. 5450   IF K>=AT THEN 5480:ELSE K=K+1
  381. 5460   FOR SS=1 TO SL:SQ(SS,I,J)=LST(SS,N(K)):NEXT
  382. 5470   IF N(K)=1 THEN IX=I:JX=J
  383. 5480  NEXT J:NEXT I
  384. 5490  C$=MID$(ANS$,JX+3*(IX-3)-3,1)
  385. 5500  CLRB=1+INT(2*RND)
  386. 5510  IF CLRB=1 THEN CLRB2=2:ELSE CLRB2=1
  387. 5520  RETURN
  388. 5600  'Generate solutions (up to 31 different ones)
  389. 5610  AT=1
  390. 5620  FOR SS=1 TO SL:LST(SS,1)=SQ(SS,QI,QJ):NEXT
  391. 5630  'First do those that have only one difference
  392. 5640  FOR SS=1 TO SL
  393. 5650   WORK=LST(SS,1)
  394. 5660   FOR NN=1 TO NN(SS)-1
  395. 5670       AT = AT + 1:IF AT>32 THEN AT=32
  396. 5680       FOR I=1 TO SL
  397. 5690           LST(I,AT)=LST(I,1)
  398. 5700       NEXT
  399. 5710       WORK = WORK +1:IF WORK>NN(SS) THEN WORK=1
  400. 5720       LST(SS,AT)=WORK
  401. 5730   NEXT NN
  402. 5740  NEXT SS
  403. 5750  'If have enough, or can't do more, exit
  404. 5760  IF AT>=6 THEN RETURN
  405. 5770  IF SL=1 THEN RETURN
  406. 5780  'Now do the those that have two values different
  407. 5790  FOR SS=1 TO SL-1
  408. 5800  FOR ST=SS+1 TO SL
  409. 5810   WORK1=LST(SS,1)
  410. 5820   FOR NN=1 TO NN(SS)-1
  411. 5830   WORK2=LST(ST,1)
  412. 5840       WORK1 = WORK1+1:IF WORK1>NN(SS) THEN WORK1=1
  413. 5850       FOR NT=1 TO NN(ST)-1
  414. 5860        AT = AT + 1:IF AT>32 THEN AT=32
  415. 5870        FOR I=1 TO SL
  416. 5880           LST(I,AT)=LST(I,1)
  417. 5890        NEXT
  418. 5900        WORK2 = WORK2+1:IF WORK2>NN(ST) THEN WORK2=1
  419. 5910        LST(SS,AT)=WORK1:LST(ST,AT)=WORK2
  420. 5920       NEXT NT
  421. 5930   NEXT NN
  422. 5940  NEXT ST
  423. 5950  NEXT SS
  424. 5960  'Should have enough for six solutions
  425. 5970  RETURN
  426. 6000  'Generate a permutation on 1 to ir
  427. 6010  FOR I=1 TO IR:N(I)=I:R(I)=RND:NEXT
  428. 6020  K=0
  429. 6030  FOR I=2 TO IR
  430. 6040    IF R(I)<R(I-1) THEN SWAP R(I),R(I-1):SWAP N(I),N(I-1):K=1
  431. 6050  NEXT:IF K>0 THEN GOTO 6020
  432. 6060  RETURN
  433. 6100  'Generate board
  434. 6110  PANEL=3:CT=0:CLS
  435. 6120  IF CLRU THEN SCREEN 1,0:ELSE SCREEN 1,1
  436. 6130  LOCATE 1,15:POKE &H4E,1:PRINT"Matrix Madness";:POKE &H4E,3
  437. 6140  IF SL=2 THEN POKE &H4E,1:ELSE IF SL=3 THEN POKE &H4E,2
  438. 6142  LOCATE 1,34:PRINT"Level ";MID$(ANS$,SL,1);:POKE &H4E,3
  439. 6150  X=CI(1)-30:XW=CI(2)-CI(1):Y=CJ(1)-25:YW=CJ(2)-CJ(1)
  440. 6160  FOR I=0 TO 3
  441. 6170   LINE (X+I*XW,Y)-(X+I*XW,Y+YW*3)
  442. 6180   IF CLRU THEN LINE (X+I*XW+1,Y)-(X+I*XW+1,Y+YW*3)
  443. 6190   LINE (X,Y+I*YW)-(X+3*XW,Y+YW*I)
  444. 6200  NEXT
  445. 6210  K=0
  446. 6220  FOR I=4 TO 5:FOR J=1 TO 3:IF K>=AT THEN 6250
  447. 6230   K=K+1:M$=MID$(ANS$,K,1)
  448. 6240   GOSUB 8300:LOCATE QR,QC:PRINT M$;
  449. 6250  NEXT:NEXT
  450. 6260  POKE &H4E,1:LOCATE 24,1:PRINT"Score:";:LOCATE 24,27:PRINT"Points:";
  451. 6270  POKE &H4E,2:LOCATE 24,14:PRINT"Question:";:POKE &H4E,3
  452. 6275  LOCATE 24,7:PRINT TPTS;:LOCATE 24,23:PRINT;TOT;
  453. 6280  GOSUB 8200:'convert coords
  454. 6290  K=0
  455. 6300  FOR I=1 TO 5
  456. 6310   FOR J=1 TO 3
  457. 6320    IF I>3 THEN IF K>=AT THEN 6380:ELSE K=K+1
  458. 6330    IF I=QI AND J=QJ THEN GOTO 6380
  459. 6340    FOR SS=1 TO SL
  460. 6350     C=SQ(SS,I,J)
  461. 6360     GOSUB 8800
  462. 6370    NEXT SS
  463. 6380   NEXT
  464. 6390  NEXT
  465. 6400  RETURN
  466. 6500  'Display answer request, set up pts and time.
  467. 6510  LOCATE 22,1
  468. 6520  PRINT"                         Choice:";
  469. 6530  SEC=101:PTS=100:STIME!=FNT!
  470. 6540  RETURN
  471. 6600  'Update display information
  472. 6610  PTS = PTS-1:IF PTS<0 THEN PTS=0
  473. 6620  LOCATE 24,27:IF PTS>0 THEN LOCATE 24,34:PRINT PTS;:ELSE PRINT"          ";
  474. 6630  RETURN
  475. 6700  'Check keyboard input, PANEL=3, only
  476. 6710  IF A$=F3$ THEN SND=NOT SND:GOSUB 7720:RETURN
  477. 6720  IF A$=F4$ THEN CLR=NOT CLR:GOSUB 7690:RETURN
  478. 6730  GOSUB 6800:'Handle a possible answer request.
  479. 6740  RETURN
  480. 6750  'Common code for demo and play
  481. 6800  'See if valid answer
  482. 6810  IF PTS=0 THEN GOTO 7100:'Time out
  483. 6820  IF LEN(A$)=0 THEN RETURN:'No answer yet, go back to wait
  484. 6830  GOSUB 3580:'Validate the character
  485. 6840  IF I>0 THEN GOTO 6930
  486. 6850    LOCATE 22,1
  487. 6860  GOSUB 7570:'Beep bad request
  488. 6870    IF AT=2 THEN PRINT "             Choices are 1 or 2:"
  489. 6880    IF AT=3 THEN PRINT "         Choices are 1, 2, or 3:"
  490. 6890    IF AT=4 THEN PRINT "      Choices are 1, 2, 3, or 4:"
  491. 6900    IF AT=5 THEN PRINT "   Choices are 1, 2, 3, 4, or 5:"
  492. 6910    IF AT=6 THEN PRINT "Choices are 1, 2, 3, 4, 5, or 6:"
  493. 6920    RETURN
  494. 6930  LOCATE 22,34:PRINT A$;
  495. 6940  IF A$<>C$ THEN PTS=(1+PTS)\2:GOSUB 7570:GOSUB 8500:LOCATE 24,34:PRINT PTS;:RETURN
  496. 6950  LOCATE 22,1:PRINT TAB(21);"   ";A$;" is correct!  ";
  497. 6960  'I=3:J=22:NC=1:GOSUB 2390:'Invert it.
  498. 6970  OK=OK+1:TPTS=TPTS+PTS:PTS=0
  499. 6980  GOSUB 7600:'Beep
  500. 6990  LOCATE 24,7:PRINT TPTS;
  501. 7000  RETURN
  502. 7100  LOCATE 22,1:GOSUB 7660:PRINT"Time ran out.  The answer is ";C$".      ";
  503. 7110  RETURN
  504. 7200  'write scores to screen
  505. 7210  PANEL=4:GOSUB 1610:'Write heading
  506. 7220  LOCATE 3,12:COLOR 7,0:PRINT"Your final score:";TPTS
  507. 7230  LOCATE 5,12:PRINT ;
  508. 7240  GOSUB 1550:'Write level
  509. 7250  LOCATE 7,9:COLOR 0,13:PRINT"  H a l l   o f   F a m e  ";
  510. 7260  LOCATE 9,1:COLOR 0,7:PRINT"Score";:LOCATE 9,8:COLOR 0,7:PRINT" Name                           ";
  511. 7270  IF TPTS>=SCR(SL,10) THEN GOSUB 13400:'Better score?  If so make room.
  512. 7280  FOR I=1 TO 10
  513. 7290     LOCATE 10+I,1:IF I=AVAIL THEN COLOR 0,13:ELSE COLOR 7,0
  514. 7300     PRINT USING "#### ";SCR(SL,I);
  515. 7310     COLOR 7,0
  516. 7320     PRINT "  ";SNM$(SL,I);
  517. 7330   NEXT
  518. 7340   IF TPTS>=SCR(SL,10) THEN GOSUB 13530:'Now ask for name
  519. 7350   RETURN
  520. 7400  'Write demo score to screen and h of f.
  521. 7410  PANEL=6:GOSUB 1610:'Write heading
  522. 7420  LOCATE 3,10,0:COLOR 7,0:PRINT"Demonstration score:";TPTS
  523. 7430  LOCATE 5,12:PRINT ;
  524. 7440  GOSUB 1550:'Write level
  525. 7450  LOCATE 7,9:COLOR 0,13:PRINT"  H a l l   o f   F a m e  ";
  526. 7460  LOCATE 9,1:COLOR 0,7:PRINT"Score";:LOCATE 9,8:COLOR 0,7:PRINT" Name                           ";
  527. 7470  FOR I=1 TO 10
  528. 7480     LOCATE 10+I,1:COLOR 7,0
  529. 7490     PRINT USING "#### ";SCR(SL,I);
  530. 7500     COLOR 7,0
  531. 7510     PRINT "  ";SNM$(SL,I);
  532. 7520   NEXT
  533. 7530   RETURN
  534. 7540  'Key Beep
  535. 7550  IF SND THEN PLAY "MBMLO4L48C"
  536. 7560  RETURN
  537. 7570  'Correct answer beep
  538. 7580  IF SND THEN PLAY "MBO2L8GC"
  539. 7590  RETURN
  540. 7600  'Wrong answer beep
  541. 7610  IF SND THEN PLAY "MBO3L16CEL8G"
  542. 7620  RETURN
  543. 7630  'Beep for screen build
  544. 7640  IF SND THEN PLAY "MBO2L8P2EP6EP8EP10E"
  545. 7650  RETURN
  546. 7660  'Beep for time out
  547. 7670  IF SND THEN PLAY "MBO2L16G"
  548. 7680  RETURN
  549. 7690  'Beep for color change
  550. 7700  IF SND THEN IF CLR THEN PLAY "MBMLO5L24C":ELSE PLAY "MBMLO3L16C"
  551. 7710  RETURN
  552. 7720  'Beep for Sound Change
  553. 7730  IF SND THEN PLAY "MBMLO5L24C":ELSE PLAY "MBMLO3L16C"
  554. 7740  RETURN
  555. 7800  'Fill in answer and mark it also
  556. 7810   I=QI:J=QJ
  557. 7820   FOR SS=1 TO SL
  558. 7830    C = SQ(SS,I,J)
  559. 7840    GOSUB 8800
  560. 7850   NEXT SS
  561. 7860   X=CI(IX):XW=(CI(2)-CI(1))\2-4
  562. 7870   Y=CJ(JX):YW=(CJ(2)-CJ(1))\2-4
  563. 7880   LINE (X-XW,Y-YW)-(X+XW,Y+YW),,B
  564. 7890   IF CLRU THEN LINE (X-XW+1,Y-YW)-(X+XW+1,Y+YW),,B
  565. 7900  RETURN
  566. 7910  'Store info to be able to flip answer
  567. 7920  X=CI(QI):Y=CJ(QJ)
  568. 7930  GET (X-XW,Y-YW)-(X+XW,Y+YW),IVC
  569. 7940  RETURN
  570. 7950  'Wait a second and flip
  571. 7960  GOSUB 3500
  572. 7970  X=CI(QI):Y=CJ(QJ)
  573. 7980  PUT (X-XW,Y-YW),IVC,XOR
  574. 7990  RETURN
  575. 8000  'Wait to continue
  576. 8010  LOCATE 25,1
  577. 8020  IF IP=IPL  THEN PRINT"   Press Enter for final score.    ";
  578. 8030  IF IP<>IPL THEN PRINT"   Press Enter for next problem.   ";
  579. 8040  I=4:J=25:NC=31:GOSUB 2590:'Video invert msg.
  580. 8050  GOSUB 7910:'Set up to flash answer on and off
  581. 8060  A$=""
  582. 8070  WHILE A$<>ENT$
  583. 8080    SEC=1:GOSUB 7950:'Wait a second and flip it.
  584. 8090  WEND
  585. 8100  RETURN
  586. 8200  'figure out coord for text given qi and qj
  587. 8210  QR=5:IF QJ=2 THEN QR=11:ELSE IF QJ=3 THEN QR=17
  588. 8220  QC=4:IF QI=2 THEN QC=12:ELSE IF QI = 3 THEN QC=20
  589. 8230  RETURN
  590. 8300  'figure out coord for text given i and j
  591. 8310  QR=8:IF J=2 THEN QR=14:ELSE IF J=3 THEN QR=20
  592. 8320  QC=I*8-6
  593. 8330  RETURN
  594. 8400  'Calc x and y given i and j
  595. 8410  X=I*8-8:Y=J*8-8
  596. 8420  RETURN
  597. 8500  'Mark Bad guess
  598. 8510  IF A$=MID$(ANS$,1,1) THEN I=4:J=1:GOSUB 8600
  599. 8520  IF A$=MID$(ANS$,2,1) THEN I=4:J=2:GOSUB 8600
  600. 8530  IF A$=MID$(ANS$,3,1) THEN I=4:J=3:GOSUB 8600
  601. 8540  IF A$=MID$(ANS$,4,1) THEN I=5:J=1:GOSUB 8600
  602. 8550  IF A$=MID$(ANS$,5,1) THEN I=5:J=2:GOSUB 8600
  603. 8560  IF A$=MID$(ANS$,6,1) THEN I=5:J=3:GOSUB 8600
  604. 8570  LOCATE 22,1:PRINT"      ";A$;" is wrong.  Choose again:  ";
  605. 8580  I=7:J=22:NC=1:GOSUB 2590:'Invert it.
  606. 8590  RETURN
  607. 8600  'Make the X
  608. 8610  X=CI(I):Y=CJ(J)
  609. 8620  LINE (X-20,Y-20)-(X+20,Y+20)
  610. 8630  LINE (X-20,Y+20)-(X+20,Y-20)
  611. 8640  RETURN
  612. 8700  'Delay routine
  613. 8710  FOR KK=1 TO 3000:NEXT
  614. 8720  RETURN
  615. 8800  'Select what to put on screen on number of choices.
  616. 8810  X=CI(I):Y=CJ(J)
  617. 8820  SX=SS(SS)
  618. 8830  IF SX<9  THEN ON SX    GOTO 8930,9050,9170,9280,9330,9400,9400,9400
  619. 8840  IF SX<17 THEN ON SX-8  GOTO 9460,9590,9610,9640,9710,9740,9780,9860
  620. 8850  IF SX<25 THEN ON SX-16 GOTO 10000,10080,10120,10160,10200,10240,10280,10350
  621. 8860  IF SX<33 THEN ON SX-24 GOTO 10440,10480,10520,10660,10690,10720,10750
  622. 8870  IF SX<40 THEN RETURN
  623. 8880  IF SX<49 THEN ON SX-40 GOTO 10800,10850,10900,10960,11010,11050,11110,11170
  624. 8890  IF SX<59 THEN ON SX-48 GOTO 11210,11290,11310,11330
  625. 8900  IF SX<67 THEN ON SX-59 GOTO 11360,11400,11440,11480,11530,11590,11650
  626. 8910  RETURN:'Return normally not used here, pattern routines return.
  627. 8920  'Routines to draw something in a box
  628. 8930  '1:  Vertical Lines
  629. 8940  XW=10
  630. 8950  ON C GOTO 8960,8980,9010
  631. 8960  LINE (X,Y-XW)-(X+1,Y+XW+1),CLRB,B
  632. 8970  RETURN
  633. 8980  LINE (X-4,Y-XW)-(X-3,Y+XW+1),CLRB,B
  634. 8990  LINE (X+4,Y-XW)-(X+5,Y+XW+1),CLRB,B
  635. 9000  RETURN
  636. 9010  LINE (X-8,Y-XW)-(X-7,Y+XW+1),CLRB,B
  637. 9020  LINE (X+8,Y-XW)-(X+9,Y+XW+1),CLRB,B
  638. 9030  LINE (X  ,Y-XW)-(X+1,Y+XW+1),CLRB,B
  639. 9040  RETURN
  640. 9050  '2:   Horizontal Lines
  641. 9060  XW=10
  642. 9070  ON C GOTO 9080,9100,9130
  643. 9080  LINE (X+XW,Y)-(X-XW+1,Y+1),CLRB,B
  644. 9090  RETURN
  645. 9100  LINE (X+XW+1,Y-4)-(X-XW,Y-3),CLRB,B
  646. 9110  LINE (X+XW+1,Y+4)-(X-XW,Y+5),CLRB,B
  647. 9120  RETURN
  648. 9130  LINE (X+XW,Y+8)-(X-XW+1,Y+9),CLRB,B
  649. 9140  LINE (X+XW,Y-8)-(X-XW+1,Y-7),CLRB,B
  650. 9150  LINE (X+XW,Y  )-(X-XW+1,Y+1),CLRB,B
  651. 9160  RETURN
  652. 9170  ON C GOTO 9190,9210,9240
  653. 9180  '3:   Circles
  654. 9190  CIRCLE (X,Y),8,CLRB:PAINT (X,Y),CLRB,CLRB
  655. 9200  RETURN
  656. 9210  CIRCLE (X-6,Y-6),8,CLRB:PAINT (X-6,Y-6),CLRB,CLRB
  657. 9220  CIRCLE (X+6,Y+6),8,CLRB:PAINT (X+6,Y+6),CLRB,CLRB
  658. 9230  RETURN
  659. 9240  CIRCLE (X-9,Y-8),8,CLRB:PAINT (X-9,Y-8),CLRB,CLRB
  660. 9250  CIRCLE (X+9,Y-8),8,CLRB:PAINT (X+9,Y-8),CLRB,CLRB
  661. 9260  CIRCLE (X,Y+6),8,CLRB:PAINT (X,Y+6),CLRB,CLRB
  662. 9270  RETURN
  663. 9280  '
  664. 9290  '4:  Vertica, Horz, Both
  665. 9300  IF C<3 THEN LINE (X+1,Y+9)-(X,Y-8),CLRB,B
  666. 9310  IF C>1 THEN LINE (X+9,Y+1)-(X-8,Y),CLRB,B
  667. 9320  RETURN
  668. 9330  '
  669. 9340  '5:  Lines with Various Orientatins
  670. 9350  IF C=1 THEN LINE (X+8,Y)-(X-8,Y)
  671. 9360  IF C=2 THEN LINE (X+4,Y+7)-(X-4,Y-7)
  672. 9370  IF C=3 THEN LINE (X+4,Y-7)-(X-4,Y+7)
  673. 9380  RETURN
  674. 9390  RETURN
  675. 9400  'Cases 6,7,8  Little Circles
  676. 9410  XW=8*(SX-7):YW=8*(C-2)
  677. 9420  CIRCLE (X-XW,Y-YW),3,CLRB
  678. 9430  PAINT  (X-XW,Y-YW),CLRB,CLRB
  679. 9440  LINE   (X-XW,Y-11)-(X-XW,Y+11),CLRB
  680. 9450  RETURN
  681. 9460  'Cases 9: Face with variable mouth
  682. 9470  XW=1:YW=1
  683. 9480  CIRCLE (X,Y),16,,,,1:PAINT (X,Y)
  684. 9490  IF C=1 THEN LINE (X-5,Y+10)-(X+5,Y+10),0
  685. 9500  IF C=2 THEN LINE (X-5,Y+11)-(X,Y+10),0:LINE (X+5,Y+11)-(X,Y+10),0
  686. 9510  IF C=3 THEN LINE (X-5,Y+10)-(X,Y+12),0:LINE (X+5,Y+10)-(X,Y+12),0
  687. 9520  IF XW=1 THEN LINE (X-2,Y+6)-(X+2,Y+6),0
  688. 9530  IF XW=2 THEN LINE (X,Y+7)-(X,Y+3),0
  689. 9540  IF XW=3 THEN CIRCLE (X,Y+6),2,0:PAINT (X,Y+6),0,0
  690. 9550  IF YW=1 THEN LINE (X-7,Y)-(X-3,Y),0:LINE (X+7,Y)-(X+3,Y),0
  691. 9560  IF YW=2 THEN LINE (X-8,Y-2)-(X-5,Y),0,BF:LINE (X+8,Y-2)-(X+5,Y),0,BF
  692. 9570  IF YW=3 THEN CIRCLE (X-5,Y),2,0:CIRCLE (X+5,Y),2,0
  693. 9580  RETURN
  694. 9590  'Case 10: Face with variable eyes and mouth
  695. 9600  SS=SS+1:YW=SQ(SS,I,J):XW=1:GOTO 9480
  696. 9610  'Case 11: Face with variable eyes and mouth
  697. 9620  SS=SS+1:YW=SQ(SS,I,J):SS=SS+1:XW=SQ(SS,I,J):GOTO 9480
  698. 9630  RETURN
  699. 9640  'Cases 12:Boxes with a division.
  700. 9650  XW=8:YW=8
  701. 9660  IF C<3 THEN LINE (X-XW,Y+YW)-(X,Y-YW),,BF
  702. 9670  IF C=3 THEN LINE (X-XW,Y+YW)-(X,Y-YW),,B
  703. 9680  IF C>1 THEN LINE (X+XW,Y+YW)-(X,Y-YW),,BF
  704. 9690  IF C=1 THEN LINE (X+XW,Y+YW)-(X,Y-YW),,B
  705. 9700  RETURN
  706. 9710  'Case 13:Double case, change size of boxes
  707. 9720  SS=SS+1:XW=2^(SQ(SS,I,J)+1):YW=8
  708. 9730  GOTO 9660
  709. 9740  'Case 14:Triple case, change size of boxes
  710. 9750  SS=SS+1:XW=2^(SQ(SS,I,J)+1)
  711. 9760  SS=SS+1:YW=(SQ(SS,I,J)^2)+1
  712. 9770  GOTO 9660
  713. 9780  'Cases 15: Triangle, Box, Or Square
  714. 9790  IF C=1 THEN CIRCLE (X,Y),10:PAINT (X,Y):RETURN
  715. 9800  IF C=2 THEN LINE (X+8,Y+8)-(X-8,Y-8),,BF:RETURN
  716. 9810  LINE (X+12,Y+9)-(X-12,Y+9)
  717. 9820  LINE (X+12,Y+9)-(X,Y-11)
  718. 9830  LINE (X-12,Y+9)-(X,Y-11)
  719. 9840  PAINT (X,Y)
  720. 9850  RETURN
  721. 9860  'Cases 16: Double: Triangle, Box, Or Square on Line
  722. 9870  XW=0
  723. 9880  YW=8*(C-2):SS=SS+1:C=SQ(SS,I,J)
  724. 9890  LINE (X+XW,Y-11)-(X+XW,Y+11),CLRB2
  725. 9900  GOSUB 9930
  726. 9910  RETURN
  727. 9920  'Routine for little tri,box,cir.
  728. 9930  IF C=1 THEN CIRCLE (X+XW,Y+YW),4,CLRB:PAINT (X+XW,Y+YW),CLRB,CLRB:RETURN
  729. 9940  IF C=2 THEN LINE (X+XW+3,Y+YW+3)-(X+XW-3,Y+YW-3),CLRB,BF:RETURN
  730. 9950  LINE (X+XW+4,Y+YW+3)-(X+XW-4,Y+YW+3),CLRB
  731. 9960  LINE (X+XW+4,Y+YW+3)-(X+XW,Y+YW-4),CLRB
  732. 9970  LINE (X+XW-4,Y+YW+3)-(X+XW,Y+YW-4),CLRB
  733. 9980  PAINT (X+XW,Y+YW),CLRB
  734. 9990  RETURN
  735. 10000  'Case 17: Triple: Same as 16, but show item 1,2 or 3 times
  736. 10010  ON C GOTO 10020,10040,10060
  737. 10020  XW=0:SS=SS+1:C=SQ(SS,I,J):GOSUB 9880
  738. 10030  RETURN
  739. 10040  XW=4:SS=SS+1:C=SQ(SS,I,J):GOSUB 9880:XW=-4:GOSUB 9890
  740. 10050  RETURN
  741. 10060  XW=8:SS=SS+1:C=SQ(SS,I,J):GOSUB 9880:XW=0:GOSUB 9890:XW=-8:GOSUB 9890
  742. 10070  RETURN
  743. 10080  'Case 18: Lines of varying length
  744. 10090  XW=2^(C+1):'4 8 16
  745. 10100  LINE (X-XW,Y-1)-(X+XW+1,Y+2),CLRB,BF
  746. 10110  RETURN
  747. 10120  'Case 19: Lines of varying length
  748. 10130  YW=2^(C+1):'4 8 16
  749. 10140  LINE (X-1,Y-YW)-(X+2,Y+YW+1),CLRB,BF
  750. 10150  RETURN
  751. 10160  'Case 20: 9 different items
  752. 10170  GOSUB 8300:QR=QR-1:QC=QC+2
  753. 10180  LOCATE QR,QC:PRINT MID$("ABC",C,1);
  754. 10190  RETURN
  755. 10200  'Case 21: A line vertical
  756. 10210  XW=8*(C-2)
  757. 10220  LINE (X+XW,Y-8)-(X+XW,Y+8)
  758. 10230  RETURN
  759. 10240  'Case 22: A line horizontal
  760. 10250  YW=8*(C-2)
  761. 10260  LINE (X-8,Y+YW)-(X+8,Y+YW)
  762. 10270  RETURN
  763. 10280  'Case 23: Overlapping Circles
  764. 10290  XW=C*4
  765. 10300  CIRCLE (X-XW,Y),8,CLRB
  766. 10310  PAINT (X-XW,Y),CLRB,CLRB
  767. 10320  CIRCLE (X+XW,Y),8,CLRB2
  768. 10330  PAINT (X+XW+2,Y),CLRB2,CLRB2
  769. 10340  RETURN
  770. 10350  'Case 24: Overlapping Triangles
  771. 10360  XW=C*4
  772. 10370  LINE (X+XW+8,Y+6)-(X+XW-8,Y+6)
  773. 10380  LINE (X+XW+8,Y+6)-(X+XW,Y-8)
  774. 10390  LINE (X+XW-8,Y+6)-(X+XW,Y-8)
  775. 10400  LINE (X-XW+8,Y+6)-(X-XW-8,Y+6)
  776. 10410  LINE (X-XW+8,Y+6)-(X-XW,Y-8)
  777. 10420  LINE (X-XW-8,Y+6)-(X-XW,Y-8)
  778. 10430  RETURN
  779. 10440  'Case 25: Part of a line
  780. 10450  IF C=1 THEN LINE (X,Y-8)-(X,Y)
  781. 10460  IF C=2 THEN LINE (X,Y+8)-(X,Y)
  782. 10470  RETURN
  783. 10480  'Case 26: Filled circle
  784. 10490  YW=8*(C-2)
  785. 10500  CIRCLE (X,YW),3:PAINT (X,YW)
  786. 10510  RETURN
  787. 10520  'Case 27:Four section item
  788. 10530  XW=1:YW=1
  789. 10540  RPI=3.14159
  790. 10550  'CIRCLE (X,Y),12,,0,RPI/2,1:CIRCLE (X,Y),12,,RPI,RPI*1.5,1
  791. 10560  LINE (X+12,Y)-(X-12,Y),3:LINE (X,Y+12)-(X,Y-12),3
  792. 10570  IF XW=1 THEN CIRCLE (X,Y),12,3,RPI*0.5,RPI,1
  793. 10580  IF XW=2 THEN LINE (X-12,Y-12)-(X,Y),3,B
  794. 10590  IF XW=3 THEN LINE (X-12,Y)-(X,Y-12),3
  795. 10600  IF YW=1 THEN CIRCLE (X,Y),12,3,RPI*1.5,RPI*2,1
  796. 10610  IF YW=2 THEN LINE (X+12,Y+12)-(X,Y),3,B
  797. 10620  IF YW=3 THEN LINE (X+12,Y)-(X,Y+12),3
  798. 10630  IF C=1 THEN PAINT (X-3,Y-3):ELSE IF CLRU THEN PAINT (X-3,Y-3),CLRB,3
  799. 10640  IF C=2 THEN PAINT (X+3,Y+3):ELSE IF CLRU THEN PAINT (X+3,Y+3),CLRB,3
  800. 10650  RETURN
  801. 10660  'case 28:double, round or square corners
  802. 10670  XW=C:SS=SS+1:YW=SQ(SS,I,J):C=3
  803. 10680  GOTO 10540
  804. 10690  'case 29:triple, like 28, but shade em.
  805. 10700  SS=SS+1:YW=SQ(SS,I,J):SS=SS+1:XW=SQ(SS,I,J)
  806. 10710  GOTO 10540
  807. 10720  'case 30:double, multple vertical lines, long med short
  808. 10730  XW=2^(C+1):SS=SS+1:C=SQ(SS,I,J)
  809. 10740  GOTO 8950:'Now do as a case 1
  810. 10750  'case 31:double, multple horiz. lines, long med short
  811. 10760  XW=2^(C+1):SS=SS+1:C=SQ(SS,I,J)
  812. 10770  GOTO 9070:'Now do as a case 1
  813. 10800  'Case 41: 'Color line up down
  814. 10810  LINE (X-3,Y-8)-(X-3,Y+8),0
  815. 10820  LINE (X+3,Y-8)-(X+3,Y+8),0
  816. 10830  LINE (X-2,Y-8)-(X+2,Y+8),C,BF
  817. 10840  RETURN
  818. 10850  'Case 42: 'Color line across
  819. 10860  LINE (X+8,Y-3)-(X-8,Y-3),0
  820. 10870  LINE (X+8,Y+3)-(X-8,Y+3),0
  821. 10880  LINE (X+8,Y-2)-(X-8,Y+2),C,BF
  822. 10890  RETURN
  823. 10900  'Case 43: 'Circle in one of several colors
  824. 10910  CIRCLE (X,Y),10,0
  825. 10920  CIRCLE (X,Y),9,C
  826. 10930  CIRCLE (X,Y),6,C
  827. 10940  PAINT (X-8,Y),C,C
  828. 10950  RETURN
  829. 10960  'Case 44: 'Solid color circle
  830. 10970  CIRCLE (X,Y),9,0
  831. 10980  CIRCLE (X,Y),8,C
  832. 10990  PAINT (X,Y),C,C
  833. 11000  RETURN
  834. 11010  'Case 45: 'Solid color box
  835. 11020  LINE (X+9,Y+9)-(X-9,Y-9),0,B
  836. 11030  LINE (X+8,Y+8)-(X-8,Y-8),C,BF
  837. 11040  RETURN
  838. 11050  'Case 46: 'Solid color triangle
  839. 11060  LINE (X+12,Y+8)-(X-12,Y+8),C
  840. 11070  LINE (X+12,Y+8)-(X,Y-12),C
  841. 11080  LINE (X-12,Y+8)-(X,Y-12),C
  842. 11090  PAINT (X,Y),C,C
  843. 11100  RETURN
  844. 11110  'Case 47: 'Triange for top of square
  845. 11120  LINE (X-12,Y-10)-(X+12,Y-10),C
  846. 11130  LINE (X+12,Y-10)-(X,Y-16),C
  847. 11140  LINE (X-12,Y-10)-(X,Y-16),C
  848. 11150  PAINT (X,Y-14),C,C
  849. 11160  RETURN
  850. 11170  'Case 48: 'Door for square
  851. 11180  IF C=1 THEN LINE (X-4,Y+8)-(X,Y),0,BF:RETURN
  852. 11190  IF C=2 THEN LINE (X,Y)-(X+4,Y+8),0,BF:RETURN
  853. 11200  RETURN
  854. 11210  'Case 49: 'Small null triangle for door
  855. 11220  IF C=2 THEN RETURN:ELSE XW=(C-2)*4
  856. 11230  LINE (X+4+XW ,Y+8)-(X-4+XW,Y+8),0
  857. 11240  LINE (X+4+XW,Y+8)-(X+XW,Y+2),0
  858. 11250  LINE (X-4+XW,Y+8)-(X+XW,Y+2),0
  859. 11260  DATA 50,50,50, 60,60,60
  860. 11270  PAINT (X+XW,Y+4),0,0
  861. 11280  RETURN
  862. 11290  'Case 50: V Lines, Colored, Uses 30 & 1
  863. 11300  CLRB=C:SS=SS+1:C=SQ(SS,I,J):GOTO 10720
  864. 11310  'Case 51: H Lines, Colored, Uses 31 & 2
  865. 11320  CLRB=C:SS=SS+1:C=SQ(SS,I,J):GOTO 10750
  866. 11330  'Case 52: 'Solid color triangle
  867. 11340  LINE (X+15,Y+8)-(X-15,Y+8),C:LINE (X+15,Y+8)-(X,Y-15),C:LINE (X-15,Y+8)-(X,Y-15),C
  868. 11350  PAINT (X,Y),C,C:RETURN
  869. 11360  'Case 60: Paired with null 60.  Level 2 or 3 use only
  870. 11370  SS = SS + 1:' Get next ones icon
  871. 11380  ON SQ(SS,I,J) GOSUB 10960,11010,11050
  872. 11390  RETURN:'Was circle square triangle usage
  873. 11400  'Case 61: Paired with null 60.  Level 2 or 3 use only
  874. 11410  SS = SS + 1:' Get next ones icon
  875. 11420  ON SQ(SS,I,J) GOSUB 8930,9050,9170
  876. 11430  RETURN:'Lines in various directions
  877. 11440  'Case 62: A Double, Level 2 or 3 use only
  878. 11450  YW=2^(C+1):SS=SS+1:XW=2^(SQ(SS,I,J)+1)
  879. 11460  LINE (X-XW,Y-YW)-(X+XW,Y+YW),,BF
  880. 11470  RETURN
  881. 11480  'Case 63: Triple, Level 3,Color
  882. 11490  YW=2^(C+1):SS=SS+1:XW=2^(SQ(SS,I,J)+1)
  883. 11500  SS=SS+1:C=SQ(SS,I,J)
  884. 11510  LINE (X-XW,Y-YW)-(X+XW,Y+YW),C,BF
  885. 11520  RETURN
  886. 11530  'Case 64: Double, Level 2
  887. 11540  YW=8*(C-2):SS=SS+1:XW=SQ(SS,I,J)
  888. 11550  CIRCLE (X,Y-YW),3,,,,XW
  889. 11560  PAINT (X,Y-YW)
  890. 11570  LINE (X,Y-11)-(X,Y+11)
  891. 11580  RETURN
  892. 11590  'Case 65: Triple, Level 3, Color
  893. 11600  XW=2^(C+1):SS=SS+1:YW=(SQ(SS,I,J)-2)*8
  894. 11610  SS=SS+1:C=SQ(SS,I,J)
  895. 11620  LINE (X-XW,Y+YW-2)-(X+XW,Y+YW+2),C,BF
  896. 11630  LINE (X-2,Y-8)-(X+2,Y+8),C,BF
  897. 11640  RETURN
  898. 11650  'Case 66: Dual, Mono
  899. 11660  XW=12
  900. 11670  IF C>1 THEN LINE (X-XW,Y-XW)-(X+XW+1,Y-XW+1),CLRB,BF
  901. 11680  IF C>1 THEN LINE (X-XW,Y+XW)-(X+XW+1,Y+XW+1),CLRB,BF
  902. 11690  IF C<3 THEN LINE (X-XW,Y-XW)-(X-XW+1,Y+XW+1),CLRB,BF
  903. 11700  IF C<3 THEN LINE (X+XW,Y-XW)-(X+XW+1,Y+XW+1),CLRB,BF
  904. 11710  SS=SS+1
  905. 11720  C=SQ(SS,I,J)
  906. 11730  IF C<3 THEN LINE (X,Y-XW)-(X+1,Y+XW+1),CLRB,BF
  907. 11740  IF C>1 THEN LINE (X-XW,Y)-(X+XW+1,Y+1),CLRB,BF
  908. 11750  RETURN
  909. 11800  'Coordinates for center of squares
  910. 11810  DATA 30,90,150, 220,284:'Across
  911. 11820  DATA 44,92,140  :'       Down
  912. 11830  'Coordinates for center of tiny sqs
  913. 11840  DATA 090,118,146,254,292:'Across
  914. 11850  DATA 80,104,128 :'       Down
  915. 11900  DATA 7 :'Different layouts of sub-patterns
  916. 11910  '   NN, NG, L(3x3)
  917. 11920  DATA 3,1, 1,1,1,2,2,2,3,3,3
  918. 11930  DATA 3,2, 1,2,3,1,2,3,1,2,3
  919. 11940  DATA 3,3, 1,2,3,2,3,1,3,1,2
  920. 11950  DATA 3,4, 1,2,3,3,1,2,2,3,1
  921. 11960  DATA 2,5, 2,1,1,1,2,1,1,1,2
  922. 11970  DATA 2,6, 1,1,2,1,2,1,2,1,1
  923. 11980  DATA 2,7, 2,1,2,1,2,1,2,1,2
  924. 12000  'Valid combinations of patterns
  925. 12010  'Number of different m1 m2 m3 color1 color2 color3 icons to use
  926. 12020  DATA 12,12,5,10,10,10 :'DV: Number of different valid ones
  927. 12030  'Format:  1, 2 , or 3 icon combinations that work together, id of 'em.
  928. 12040  '     NV(DV,1) to NV(DV,3)
  929. 12050  'Mono: Beginner items (12)
  930. 12060  DATA  2,0,0,  3,0,0,  4,0,0,  5,0,0,  7,0,0
  931. 12070  DATA  9,0,0, 12,0,0, 15,0,0, 18,0,0, 19,0,0
  932. 12080  DATA 23,0,0, 24,0,0
  933. 12090  'Mono: Intermediate (11)
  934. 12100  DATA 1,2,0,    6,8,0,  10,10,0, 13,13,0
  935. 12110  DATA 64,64,0, 16,16,0, 18,19,0, 61,61,0
  936. 12120  DATA  30,30,0, 31,31,0,  21,22,0
  937. 12130  DATA 66,66,0
  938. 12140  'Mono: Advanced (5)
  939. 12150  DATA   6,7,8,  14,14,14, 17,17,17 ,11,11,11, 29,29,29
  940. 12160  'Color: Beginner items (10)
  941. 12170  DATA 41,0,0, 42,0,0, 43,0,0, 44,0,0, 45,0,0
  942. 12180  DATA  2,0,0,  7,0,0,  4,0,0, 46,0,0, 23,0,0
  943. 12190  'Color: Intermediate (10)
  944. 12200  DATA 41,42,0,  43, 7,0,  46,47,0
  945. 12210  DATA 52,45,0, 66,66,0,  18,19,0, 16,16,0
  946. 12220  DATA 46,48,0, 60,60,0, 61,61,0
  947. 12230  'Color: Advanced (10)
  948. 12240  DATA 45,41,42, 45,47,48, 60,60,47
  949. 12250  DATA 63,63,63, 65,65,65, 17,17,17, 11,11,11, 29,29,29
  950. 12260  DATA 50,50,50, 51,51,51
  951. 12300  'Variable descriptions
  952. 12310  'IPL = ...      Number of problems to ask.
  953. 12320  'IP = 1 TO 10   Number of problem being asked.
  954. 12330  'ANS$ =   Characters used for answers and answer labels
  955. 12340  'NN (0)     Number of unique ICONS used in a pattern.
  956. 12350  'NN = Number of unique ICONS used in a pattern.
  957. 12360  'L(3X3) = Sub-pattern being used.
  958. 12370  'SS(0)  = Number of patterns displayed simultaneously.
  959. 12380  '  1-3  = ICON Set to be used for the pattern(s)
  960. 12390  'SP(NL,3,3) = Storage for all patterns
  961. 12400  'SP(NL,0,0) = Has number of icons in this pattern
  962. 12410  'NG(NL)     = Has pattern category, used to avoid conflicts
  963. 12420  'SQ(SS,6,3) = For patterns and answers to be used for a problem.
  964. 12430  'LST(SS,32) = Possible solutions, up to six will be shown.
  965. 12440  'N(32)      = Used to scramble choices
  966. 12450  'R(32)      = Uused to scramble choices
  967. 12460  'IR         = Number of choices to be scrambled
  968. 12470  'IL  = 4 if to show 3 answers, 5 if to show 6 answers
  969. 12480  'QI, QJ indicates the square on the 3x3 to be blank
  970. 12490  'P(3)=Patterns selected for use
  971. 12500  'PAUSE 0=Disabled, 1=Enabled with 1 msg line, 2=Enabled with 2 msg lines
  972. 12510  'CI(), CJ()   Center of squares for 3x3 problem + 2x3 Answers
  973. 12520  GOTO 12040:'<--- See for NV description.
  974. 12530  'SND = -1   Sound on ,  =0    Sound off
  975. 12540  'CLR = -1   Color on ,  =0    Color off
  976. 12550  'CLRU=      Whether color is in use on current problem.
  977. 12560  'CT = -1 Color text mode,   0 Graphics mode
  978. 12570  '--- Where the panels are----------
  979. 12580  ' -T- Text mode,  -G- Graphics mode
  980. 12590  GOSUB 4400:'Panel 0 -T- Title Panel
  981. 12600  GOSUB 4490:'Panel 1 -G- Introduction
  982. 12610  GOSUB 4860:'Panel 2 -T- Select Playing Level
  983. 12620  ' Play:
  984. 12630  GOSUB 6100:'Panel 3 -G- Display Problem
  985. 12640  GOSUB 1530:'Panel 4 -T- Final Score
  986. 12650  '           Demo
  987. 12660  GOSUB 1990:'Panel 3 -G- Uses panel 3 for demo
  988. 12670  GOSUB 2470:'Panel 6 -T- Demo Score
  989. 12680  RETURN
  990. 12700  'Display an Icon
  991. 12710  'Routine used to test icon combinations.
  992. 12720  CLS:LOCATE 21,1:PRINT"Symbol display.";
  993. 12730  LOCATE 23,1:PRINT"One moment,  setting up.";
  994. 12740  KEY OFF
  995. 12750  GOSUB 3750
  996. 12760  LOCATE 23,1
  997. 12770  INPUT "Select Level (1, 2, 3)";SL
  998. 12780  IF SL=0 THEN GOTO 1090
  999. 12790  INPUT "Color (Y or N)";A$:IF A$="Y" OR A$="y" THEN CLRU=-1:ELSE CLRU=0
  1000. 12800  IF CLRU THEN SCREEN 1,0:ELSE SCREEN 1,1
  1001. 12810  WSL=SL:IF CLRU THEN WSL = WSL + 3
  1002. 12820  FOR NUMVAL=DS(WSL) TO DS(WSL)+DV(WSL)-1
  1003. 12830  FOR I=1 TO 3:SS(I)=NV(NUMVAL,I):NEXT I
  1004. 12840  CLRB=1:CLRB2=2
  1005. 12850  P(1)=1:P(2)=2:P(3)=4
  1006. 12860  FOR I=1 TO 3:FOR J=1 TO 3
  1007. 12870  SQ(1,I,J)=SP(P(1),I,J)
  1008. 12880  SQ(2,I,J)=SP(P(2),I,J)
  1009. 12890  SQ(3,I,J)=SP(P(3),I,J)
  1010. 12900  NEXT:NEXT
  1011. 12910  CLS:WIDTH 40
  1012. 12920  LOCATE 1,1:PRINT"Level";SL;
  1013. 12930  IF CLRU THEN PRINT" Color:  ON ";:ELSE PRINT" Color:  OFF";
  1014. 12940  PRINT TAB(30);NUMVAL-DS(WSL)+1;"of";DV(WSL):I=30:J=1:NC=10:GOSUB 2590
  1015. 12950   LOCATE 4,28:PRINT"Symbols:":LOCATE 6,27
  1016. 12960   FOR I=1 TO SL:PRINT SS(I);:NEXT
  1017. 12970   LOCATE 10,28:PRINT"Pattern: ":LOCATE 12,27
  1018. 12980   FOR I=1 TO SL:PRINT P(I);:NEXT:PRINT:
  1019. 12990   X=CI(1)-30:XW=CI(2)-CI(1):Y=CJ(1)-25:YW=CJ(2)-CJ(1)
  1020. 13000   FOR I=0 TO 3
  1021. 13010     LINE (X+I*XW,Y)-(X+I*XW,Y+YW*3)
  1022. 13020     IF CLRU THEN LINE (X+I*XW+1,Y)-(X+I*XW+1,Y+YW*3)
  1023. 13030     LINE (X,Y+I*YW)-(X+3*XW,Y+YW*I)
  1024. 13040   NEXT
  1025. 13050   FOR I=1 TO 3:FOR J=1 TO 3
  1026. 13060    FOR SS=1 TO SL:C=SQ(SS,I,J)
  1027. 13070     GOSUB 8800
  1028. 13080    NEXT SS
  1029. 13090   NEXT J
  1030. 13100   NEXT I
  1031. 13110   LOCATE 23,1:PRINT"Press Enter For Next";:INPUT A$
  1032. 13120  NEXT NUMVAL
  1033. 13130  CLS:GOTO 12760
  1034. 13200  ON I GOSUB 13220,13400,13800
  1035. 13210  'READ, show (and ask), write
  1036. 13220  'read scores
  1037. 13230  ON ERROR GOTO 13310
  1038. 13240  OPEN "madness.log" FOR INPUT AS #1
  1039. 13250  FOR SL=1 TO 3:FOR I=1 TO 10
  1040. 13260   INPUT #1,SCR(SL,I),SNM$(SL,I)
  1041. 13270  NEXT I:NEXT SL
  1042. 13280  CLOSE
  1043. 13290  ON ERROR GOTO 0
  1044. 13300  RETURN
  1045. 13310  'no info
  1046. 13320  FOR SL=1 TO 3:FOR I=1 TO 10
  1047. 13330   SCR(SL,I)=0:SNM$(SL,I)=" - "
  1048. 13340  NEXT I:NEXT SL
  1049. 13350  SCR(1,1)=950:SNM$(1,1)="Good Player"
  1050. 13360  SCR(2,1)=800:SNM$(2,1)="Good Player"
  1051. 13370  SCR(3,1)=700:SNM$(3,1)="Good Player"
  1052. 13380  RESUME 13280
  1053. 13400  'Update score, maybe ask for name.
  1054. 13410  '
  1055. 13420  IF SND THEN PLAY "MBL8CCL16EP8L8CCL16E
  1056. 13430  INS=0:FOR I=1 TO 10:IF TPTS>=SCR(SL,I) THEN INS=I:GOTO 13450
  1057. 13440  NEXT
  1058. 13450  AVAIL = 10
  1059. 13460  WHILE AVAIL>INS
  1060. 13470   SCR(SL,AVAIL)=SCR(SL,AVAIL-1)
  1061. 13480   SNM$(SL,AVAIL)=SNM$(SL,AVAIL-1)
  1062. 13490   AVAIL = AVAIL - 1
  1063. 13500  WEND
  1064. 13510  SCR(SL,AVAIL) = TPTS:SNM$(SL,AVAIL)=""
  1065. 13520  RETURN
  1066. 13530  'Get the name of the player
  1067. 13540  LOCATE 22,3:COLOR 7,0:PRINT"Enter your name in the Hall of Fame";
  1068. 13550  LOCATE 10+AVAIL,8,1
  1069. 13560  P$ = ""
  1070. 13570  I=0:WHILE I<32
  1071. 13580    A$="":WHILE A$="":A$=INKEY$:WEND
  1072. 13590    IF A$=ENT$ THEN GOTO 13690
  1073. 13600    IF A$=CHR$(8) THEN IF I>0 THEN I=I-1:P$=LEFT$(P$,I):GOTO 13660
  1074. 13610    IF LEN(A$)>1 THEN 13580
  1075. 13620    IF A$<" " OR A$=CHR$(34) THEN GOTO 13580
  1076. 13630    IF LEN(P$)=0 THEN IF A$>="a" AND A$<="z" THEN A$=CHR$(ASC(A$)-32)
  1077. 13640    P$=P$+A$:I=I+1
  1078. 13650    IF I=31 THEN GOSUB 7540
  1079. 13660    LOCATE 10+AVAIL,8,1:COLOR 5,0:PRINT P$;
  1080. 13670  WEND
  1081. 13680  LOCATE ,,0
  1082. 13690  SNM$(SL,AVAIL)=P$
  1083. 13700  LOCATE ,,0
  1084. 13710  LOCATE 10+AVAIL,7:PRINT" ";
  1085. 13720  LOCATE 22,3:PRINT SPC(35);
  1086. 13730  RETURN
  1087. 13800  'Write information to disk.
  1088. 13810  ON ERROR GOTO 13890
  1089. 13820  OPEN "madness.log" FOR OUTPUT AS #1
  1090. 13830  FOR SL=1 TO 3:FOR I=1 TO 10
  1091. 13840   PRINT #1,SCR(SL,I);",";CHR$(34);SNM$(SL,I);CHR$(34)
  1092. 13850  NEXT I:NEXT SL
  1093. 13860  CLOSE
  1094. 13870  ON ERROR GOTO 0
  1095. 13880  RETURN
  1096. 13890  SCREEN 0,1
  1097. 13900  PRINT"Unable to record scores on disk.  (";ERR;")"
  1098. 13910  GOSUB 7600:SEC=5:WHILE SEC>0:GOSUB 3300:WEND:'Pause, then exit.
  1099. 13920  RESUME 13860
  1100.