home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib32b.dsk / SPELLING.MAZE.bas < prev    next >
BASIC Source File  |  2023-02-26  |  7KB  |  201 lines

  1. 10  REM **********************
  2. 20  REM * SPELLING.MAZE      *
  3. 30  REM * BY W. P. DOYLE, JR.*
  4. 40  REM * COPYRIGHT (C) 1987 *
  5. 50  REM * BY MICROSPARC, INC *
  6. 60  REM * CONCORD, MA  01742 *
  7. 70  REM **********************
  8. 80  REM  SET UP PROGRAM
  9. 90  HIMEM: 36864 -1024 *( PEEK(48896) = 76)
  10. 100 D$ =  CHR$(4):B$ =  CHR$(7)
  11. 110  ONERR  GOTO 1790
  12. 120 NW = 10
  13. 130  PRINT D$"BLOAD MAZE.SHAPES"
  14. 140  PRINT D$"BLOAD MAZE.TUNE"
  15. 150  POKE 216,0
  16. 160  POKE 232,0: POKE 233,144
  17. 170  HOME : VTAB 4: PRINT "SPELLING MAZE BY W.P. DOYLE, JR."
  18. 180  PRINT "COPYRIGHT 1987 BY MICROSPARC, INC.": VTAB 20: PRINT "RETURN TO CONTINUE";: GET Z$: PRINT 
  19. 190  DIM P(36,2),UP(36),DN(36),RT(36),LT(36),WD$(NW),WF(NW)
  20. 200  FOR I = 1 TO 36
  21. 210 R1 =  INT((I -1)/6):R = 6 -R1:C = I -(R1 *6)
  22. 220 P(I,2) = (R *20) +10
  23. 230 P(I,1) = (C *20) +70
  24. 240  NEXT I
  25. 250  FOR I = 1 TO NW
  26. 260  READ WD$(I)
  27. 270 WF(I) = 0
  28. 280  NEXT I
  29. 290  HCOLOR= 3: SCALE= 1
  30. 300 WALL = 27:MAN = 28:ARROW = 29
  31. 310  DATA  CAT,DOG,BIRD,BOAT,CAR,APPLE,TREE,MAN,GIRL,BOY
  32. 320  REM  KEYBOARD OR JOYSTICK COMMANDS
  33. 330  VTAB 10: CALL  -958
  34. 340 JF = 0: PRINT "KEYBOARD OR JOYSTICK (K OR J)? ";: GET R$: PRINT R$
  35. 350 R$ =  LEFT$(R$,1)
  36. 360  IF R$ = "J"  OR R$ =  CHR$(106)  THEN JF = 1
  37. 370  IF R$ < >"J"  AND R$ < >"K"  AND R$ < > CHR$(106)  AND R$ < > CHR$(107)  THEN  PRINT B$;: GOTO 330
  38. 380  REM  GET WORD
  39. 390  FOR I = 1 TO NW
  40. 400  IF WF(I) = 0  THEN 430
  41. 410  NEXT I
  42. 420  RESTORE : GOTO 250
  43. 430 W =  INT( RND(1) *NW) +1
  44. 440  IF WF(W) = 1  THEN 430
  45. 450 WF(W) = 1
  46. 460 WL =  LEN(WD$(W))
  47. 470  FOR I = 1 TO WL
  48. 480 L$(I) =  MID$ (WD$(W),I,1):LN(I) =  ASC(L$(I))
  49. 490  NEXT I
  50. 500  REM  SET UP COMMAND STRINGS
  51. 510 UC =  ASC("I"):UA = 11: REM  UP COMMANDS
  52. 520 DC =  ASC("M"):DA = 10: REM  DOWN COMMANDS
  53. 530 LC =  ASC("J"):LA = 8: REM  LEFT COMMANDS
  54. 540 RC =  ASC("K"):RA = 21: REM  RIGHT COMMANDS
  55. 550  REM  DRAW MAZE
  56. 560  HGR : HTAB 1: VTAB 21: CALL  -958
  57. 570  HPLOT 100,140 TO 200,140 TO 200,20
  58. 580  HPLOT 80,120 TO 80,20 TO 200,20
  59. 590  FOR I = 1 TO 36
  60. 600 UP(I) = 0:DN(I) = 0:RT(I) = 0:LT(I) = 0
  61. 610  NEXT I
  62. 620  FOR I = 1 TO 6
  63. 630 DN(I) = 1:UP(30 +I) = 1
  64. 640 LT(1 +(I -1) *6) = 1:RT(I *6) = 1
  65. 650  NEXT I
  66. 660  FOR I = 1 TO 35
  67. 670 T =  INT( RND(1) *3) +1
  68. 680  IF T = 1  OR (T = 2  AND (I -(( INT((I -1)/6)) *6) = 6))  OR (T = 3  AND I >30)  THEN 770
  69. 690 R1 =  INT((I -1)/6):R = 6 -R1:C = I -(R1 *6)
  70. 700  IF R = 1  OR R = 6  OR C = 6  THEN 770
  71. 710  IF T = 3  THEN 750
  72. 720 RT(I) = 1:LT(I +1) = 1
  73. 730  ROT= 0: DRAW WALL AT P(I,1),P(I,2)
  74. 740  GOTO 770
  75. 750 UP(I) = 1:DN(I +6) = 1
  76. 760  ROT= 48: DRAW WALL AT P(I,1),P(I,2)
  77. 770  NEXT I
  78. 780  ROT= 0
  79. 790  REM  PLACE LETTERS
  80. 800  FOR I = 1 TO WL
  81. 810 LP =  INT( RND(1) *34) +2
  82. 820  IF I = 1  THEN 860
  83. 830  FOR J = 1 TO I
  84. 840  IF LP = LP(J)  THEN 810
  85. 850  NEXT J
  86. 860 LP(I) = LP
  87. 870  DRAW LN(I) -64 AT P(LP,1),P(LP,2)
  88. 880  NEXT I
  89. 890 CL = 1:LP(WL +1) = 0
  90. 900  REM  PLACE MAN AND DIRECTIONS
  91. 910  HTAB 1: VTAB 21: CALL  -958
  92. 920  PRINT "MOVE THE MAN THROUGH THE MAZE AND SPELL"
  93. 930  FOR I = 1 TO WL
  94. 940  PRINT L$(I);" ";
  95. 950  NEXT I
  96. 960  PRINT : PRINT "TO OPEN THE EXIT (<ESC> TO QUIT)"
  97. 970  XDRAW MAN AT P(1,1),P(1,2):MP = 1
  98. 980  REM  DRAW COMMANDS ON SCREEN
  99. 990  IF JF GOTO 1090
  100. 1000  IF UC < >11  THEN  DRAW UC -64 AT 240,70: GOTO 1020
  101. 1010  ROT= 0: DRAW ARROW AT 240,70
  102. 1020  IF LC < >8  THEN  DRAW LC -64 AT 220,80: GOTO 1040
  103. 1030  ROT= 48: DRAW ARROW AT 220,80
  104. 1040  IF RC < >21  THEN  DRAW RC -64 AT 260,80: GOTO 1060
  105. 1050  ROT= 16: DRAW ARROW AT 260,80
  106. 1060  IF DC < >10  THEN  DRAW DC -64 AT 240,90: GOTO 1090
  107. 1070  ROT= 32: DRAW ARROW AT 240,90
  108. 1080  REM  GET COMMAND & DO IT
  109. 1090  ROT= 0
  110. 1100  IF JF GOTO 1900
  111. 1110 A$ = "ARROWS"
  112. 1120  IF UC < >11  THEN A$ =  CHR$(UC) +"," + CHR$(LC) +"," + CHR$(RC) +"," + CHR$(DC)
  113. 1130  HTAB 1: VTAB 24: CALL  -958: PRINT "PUSH ";A$;": ";: GET R$
  114. 1140 R =  ASC(R$)
  115. 1150  IF R >90  THEN R = R -32
  116. 1160 NP = 0
  117. 1170  IF (R = UC  OR R = UA)  AND UP(MP) = 0  THEN NP = MP +6
  118. 1180  IF (R = LC  OR R = LA)  AND LT(MP) = 0  THEN NP = MP -1
  119. 1190  IF (R = RC  OR R = RA)  AND RT(MP) = 0  THEN NP = MP +1
  120. 1200  IF (R = DC  OR R = DA)  AND DN(MP) = 0  THEN NP = MP -6
  121. 1210  IF R = 27  THEN  HOME : VTAB 21: GOTO 1470
  122. 1220  IF ((NP = 0)  AND (JF = 0))  THEN  PRINT B$;: GOTO 1130
  123. 1230  IF ((NP = 0)  AND (JF = 1))  THEN 1090
  124. 1240  XDRAW MAN AT P(MP,1),P(MP,2)
  125. 1250  XDRAW MAN AT P(NP,1),P(NP,2)
  126. 1260  IF NP = LP(CL)  THEN 1310
  127. 1270  FOR I = 1 TO WL
  128. 1280  IF NP = LP(I)  AND L$(CL) = L$(I)  THEN 1310
  129. 1290  NEXT I
  130. 1300  GOTO 1400
  131. 1310  GOSUB 1550
  132. 1320  VTAB 22: HTAB (2 *CL -1): INVERSE : PRINT L$(CL);: NORMAL 
  133. 1330  XDRAW (LN(CL) -64) AT P(NP,1),P(NP,2):CL = CL +1
  134. 1340  REM  OPEN EXIT
  135. 1350  IF CL < = WL  THEN 1400
  136. 1360  HCOLOR= 0: HPLOT 180,20 TO 200,20 TO 200,40
  137. 1370  HCOLOR= 3
  138. 1380  GOSUB 1620
  139. 1390  REM  CHECK FOR "WIN"
  140. 1400 MP = NP
  141. 1410  IF MP = 36  AND CL >WL  THEN 1430
  142. 1420  GOTO 1090
  143. 1430  HTAB 1: VTAB 21: CALL  -958
  144. 1440  PRINT "YOU DID IT!!!"
  145. 1450  GOSUB 1710
  146. 1460  REM  QUIT ROUTINE
  147. 1470  PRINT "PRESS Q TO QUIT-RETURN TO PLAY AGAIN";
  148. 1480  POKE  -16368,0
  149. 1490  IF  PEEK( -16287) >127  OR  PEEK( -16286) >127 GOTO 390
  150. 1500  ON  PEEK( -16384) <128 GOTO 1490:R$ =  CHR$( PEEK( -16384) -128): POKE  -16368,0
  151. 1510  IF R$ < >"Q"  AND R$ < > CHR$(113)  THEN 390
  152. 1520  TEXT : HOME : PRINT "SEE YOU LATER!!"
  153. 1530  END 
  154. 1540  REM  MUSIC - GOT LETTER
  155. 1550  POKE 7,100
  156. 1560  FOR J = 1 TO 3
  157. 1570  POKE 6,200: CALL 768
  158. 1580  POKE 6,100: CALL 768
  159. 1590  NEXT J
  160. 1600  RETURN 
  161. 1610  REM  MUSIC - OPEN EXIT
  162. 1620  POKE 7,100
  163. 1630  FOR J = 1 TO 5
  164. 1640  POKE 6,(220 -(J *10))
  165. 1650  CALL 768
  166. 1660  NEXT J
  167. 1670  POKE 7,200: POKE 6,160
  168. 1680  CALL 768
  169. 1690  RETURN 
  170. 1700  REM  MUSIC - "WIN"
  171. 1710  FOR J = 10 TO 100  STEP 10
  172. 1720  POKE 6,100 +J: POKE 7,100: CALL 768
  173. 1730  NEXT J
  174. 1740  FOR J = 10 TO 100  STEP 10
  175. 1750  POKE 6,210 -J: POKE 7,100: CALL 768
  176. 1760  NEXT J
  177. 1770  RETURN 
  178. 1780  REM  ERROR ROUTINE
  179. 1790  PRINT B$;B$;B$;
  180. 1800  PRINT "THE FILES MAZE.SHAPES AND MAZE.TUNE"
  181. 1810  PRINT "MUST BE IN THE DEFAULT DISK DRIVE."
  182. 1820  PRINT "PLEASE PUT THEM THERE AND PUSH 'C',"
  183. 1830  PRINT "OR PUSH 'Q' TO QUIT."
  184. 1840  GET R$: PRINT R$
  185. 1850  IF R$ = "C"  THEN  RESUME 
  186. 1860  IF R$ = "Q"  OR R$ =  CHR$(113)  THEN  END 
  187. 1870  PRINT B$;"PUSH C OR Q"
  188. 1880  GOTO 1840
  189. 1890  REM  JOYSTICK CONTROL
  190. 1900  HTAB 1: VTAB 24: PRINT "USE THE JOYSTICK";
  191. 1910  FOR I = 1 TO 150: NEXT I
  192. 1920 R = 0:P0 =  PDL(0):P1 =  PDL(1)
  193. 1930  IF P0 <100  THEN R = LC
  194. 1940  IF P0 >156  THEN R = RC
  195. 1950  IF P1 <100  THEN R = UC
  196. 1960  IF P1 >156  THEN R = DC
  197. 1970 X =  PEEK( -16384)
  198. 1980  IF X <127  THEN 2010
  199. 1990  IF X = 155  THEN R = 27
  200. 2000  POKE  -16368,0
  201. 2010  GOTO 1160