home *** CD-ROM | disk | FTP | other *** search
/ RBBS in a Box Volume 1 #2 / RBBS_vol1_no2.iso / 010r / pcmaze.bas < prev    next >
BASIC Source File  |  1985-04-17  |  7KB  |  204 lines

  1. 0  REM MODIFIED FOR USE ON THE IBM-PC
  2. 1  REM BY GARY & DONNA MCCOY
  3. 2 KEY OFF
  4. 3 CLEAR,,20000
  5. 4 SCREEN 0:WIDTH 40
  6. 200  CLS : GOTO 6400
  7. 800 N = 2:A = H:B = V:FF = 2 ^ (F - 1)
  8. 900 SCREEN 1:COLOR 0,1:CLS
  9. 1000 Z = M(A,B) * FF
  10. 1200  IF  FN M(Z / 16) = 0 THEN 1600
  11. 1300 RL =  - 1: GOSUB 5400
  12. 1400  GOTO 2000
  13. 1600 W = M(A + S,B - R) * FF
  14. 1700  IF  FN M(W / 128) = 0 THEN 2000
  15. 1800 RL =  - 1: GOSUB 4600
  16. 2000  IF  FN M(Z / 64) = 0 THEN 2400
  17. 2100 RL = 1: GOSUB 5400
  18. 2200  GOTO 2800
  19. 2400 W = M(A - S,B + R) * FF
  20. 2500  IF  FN M(W / 128) = 0 THEN 2800
  21. 2600 RL = 1: GOSUB 4600
  22. 2800  IF  FN M(Z / 128) = 1 THEN 3400
  23. 3000 N = N + 1: IF N > 8 THEN 3500
  24. 3100 A = A + R:B = B + S: IF B < 2 THEN 3500
  25. 3200  GOTO 1000
  26. 3400  GOSUB 3800
  27. 3500  RETURN
  28. 3800  PSET (VX + DX(N),YU(N)),2
  29. 3900  LINE (VX + DX(N),YU(N))-(VX + DX(N),YD(N)),2
  30. 4000  LINE (VX + DX(N),YD(N))-(VX - DX(N),YD(N)),2
  31. 4100  LINE (VX - DX(N),YD(N))-(VX - DX(N),YU(N)),2
  32. 4200  LINE (VX - DX(N),YU(N))-(VX + DX(N),YU(N)),2
  33. 4300  RETURN
  34. 4600  PSET (VX + RL * DX(N - 1),YU(N)),2
  35. 4700  LINE (VX + RL * DX(N - 1),YU(N))-(VX + RL * DX(N),YU(N)),2
  36. 4800  LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2
  37. 4900  LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N)),2
  38. 5000  RETURN
  39. 5400  PSET(VX + RL * DX(N - 1),YU(N - 1)),2
  40. 5500 LINE (VX + RL * DX(N-1),YU(N-1))-(VX + RL * DX(N),YU(N)),2
  41. 5600  LINE (VX + RL * DX(N),YU(N))-(VX + RL * DX(N),YD(N)),2
  42. 5700  LINE (VX + RL * DX(N),YD(N))-(VX + RL * DX(N - 1),YD(N - 1)),2
  43. 5800  IF N > 2 THEN  LINE (VX + RL * DX(N-1),YD(N-1))-(VX + RL * DX(N - 1),YU(N - 1)),2
  44. 5900  RETURN
  45. 6400  CLS:COLOR 9,0:LOCATE 6,12: PRINT "YOU ARE THE RAT!": PRINT : LOCATE 4,4: PRINT "A DIFFERENT PERSPECTIVE ON MAZES."
  46. 6405 CH = 0
  47. 6410  PRINT : LOCATE 1,1: PRINT "FROM THE COMPUSERVE APPLE USER'S GROUP"
  48. 6420  LOCATE 2,9: PRINT "PUBLIC ACCESS DATABASE"
  49. 6425  LOCATE 17,1: PRINT "----------------------------------------"
  50. 6430  LOCATE 18,9: PRINT "USE <- AND -> TO TURN"
  51. 6440  PRINT : LOCATE 19,6: PRINT "<SPACE BAR> TO MOVE FORWARD"
  52. 6450  PRINT : LOCATE 20,3: PRINT "<ESCAPE> FOR A TOP VIEW (TO CHEAT)"
  53. 6500  DEF  FN M(X) =  INT (X) -  INT ( INT (X) / 2) * 2
  54. 6600  LOCATE 15,1:FX = 36: INPUT "PLEASE ENTER MAZE SIZE (H,V) ";H,V
  55. 6700 H =  INT (H):V =  INT (V)
  56. 6800  IF H > 2 AND H < 51 AND V > 2 AND V < 51 THEN 7000
  57. 6900  PRINT "2<H<51 -- 2<V<51": GOTO 6600
  58. 7000 N = H * V - 1:H = H + 1:V = V + 1:D = 1
  59. 7100  DIM M(52,52),W(400)
  60. 7200  FOR J = 1 TO V + 1:M(1,J) = 4:M(H + 1,J) = 1: NEXT J
  61. 7300 MX = 278:MY = 190:VX =  INT (MX / 2):VY =  INT (MY / 2):X = VX
  62. 7500  FOR J = 1 TO 8:DX(J) = X:YU(J) =  INT (VY - X * VY / VX)
  63. 7600 YD(J) =  INT (VY + X * (MY - VY) / VX):X =  INT (X * 7 / 10): NEXT J
  64. 7700  FOR I = 2 TO H:M(I,V + 1) = 8:M(I,1) = 2
  65. 7800  FOR J = 2 TO V:M(I,J) = 15: NEXT J,I
  66. 8500 R =  INT (H / 2 + 1):S =  INT (V / 2 + 1):M(R,S) = 15
  67. 8550  COLOR 23
  68. 8600  PRINT "            GENERATING MAZE."
  69. 8650  COLOR 9
  70. 8900  FOR IW = 1 TO N
  71. 9000 I = 0
  72. 9100  IF M(R - 1,S) < 15 THEN 9300
  73. 9200 I = I + 1:C(I) = 1
  74. 9300  IF M(R,S - 1) < 15 THEN 9500
  75. 9400 I = I + 1:C(I) = 2
  76. 9500  IF M(R + 1,S) < 15 THEN 9700
  77. 9600 I = I + 1:C(I) = 3
  78. 9700  IF M(R,S + 1) < 15 THEN 9900
  79. 9800 I = I + 1:C(I) = 4
  80. 9900  IF I = 0 THEN 12300
  81. 10000  IF I <  > 1 THEN I =  INT ( RND (1) * I) + 1
  82. 10100  ON C(I) GOTO 10300,10800,11300,11800
  83. 10300 M(R,S) = M(R,S) -  FN M(M(R,S))
  84. 10400 R = R - 1
  85. 10500 M(R,S) = M(R,S) -  FN M(M(R,S) / 4) * 4
  86. 10600  GOTO 13400
  87. 10800 M(R,S) = M(R,S) -  FN M(M(R,S) / 8) * 8
  88. 10900 S = S - 1
  89. 11000 M(R,S) = M(R,S) -  FN M(M(R,S) / 2) * 2
  90. 11100  GOTO 13400
  91. 11300 M(R,S) = M(R,S) -  FN M(M(R,S) / 4) * 4
  92. 11400 R = R + 1
  93. 11500 M(R,S) = M(R,S) -  FN M(M(R,S))
  94. 11600  GOTO 13400
  95. 11800 M(R,S) = M(R,S) -  FN M(M(R,S) / 2) * 2
  96. 11900 S = S + 1
  97. 12000 M(R,S) = M(R,S) -  FN M(M(R,S) / 8) * 8
  98. 12100  GOTO 13400
  99. 12300  IF D =  - 1 THEN 12700
  100. 12400  IF R <  > H THEN 13100
  101. 12500  IF S <  > V THEN 13000
  102. 12600 R = 2:S = 2: GOTO 13200
  103. 12700  IF R <  > 2 THEN 13100
  104. 12800  IF S <  > V THEN 13000
  105. 12900 R = H:S = 2: GOTO 13200
  106. 13000 S = S + 1:D =  - D: GOTO 13200
  107. 13100 R = R + D
  108. 13200  IF M(R,S) = 15 THEN 12300
  109. 13300  GOTO 9000
  110. 13400  NEXT IW
  111. 13500 MH = H:MV = V
  112. 13700 I =  INT ( RND (1) * (MH - 1)) + 2
  113. 13800 M(I,1) = 0
  114. 13900 M(I,2) = M(I,2) -  FN M(M(I,2) / 8) * 8
  115. 14000 H =  INT ( RND (1) * (MH - 1)) + 2
  116. 14100 H1 = H:V1 = V
  117. 14300  COLOR 23: LOCATE 23,12: PRINT "MAZE COMPLETED.": COLOR 9
  118. 14400  GOTO 17000
  119. 14700 HZ =  INT (MX / MH):VZ =  INT (MY / MV)
  120. 14750 CH = CH + 1
  121. 14800 SCREEN 1:COLOR 0,1:CLS
  122. 14900  PSET (1 + HZ,1 + VZ),2
  123. 15000  LINE (1 + HZ,1 + VZ)-(1 + HZ,MV * VZ + 1),2
  124. 15100  FOR J = 1 TO MV: FOR I = 2 TO MH
  125. 15200 N = M(I,J):X = I * HZ + 1:Y = J * VZ + 1
  126. 15300  IF  FN M(N / 2) = 0 THEN 15700
  127. 15500  PSET (X,Y),2
  128. 15600  LINE (X,Y)-(X - HZ,Y),2
  129. 15700  IF  FN M(N / 4) = 0 THEN 16100
  130. 15900  PSET (X,Y),2
  131. 16000  LINE (X,Y)-(X,Y - VZ),2
  132. 16100  NEXT I,J
  133. 16300 X = H * HZ - 1:Y = V * VZ - 1
  134. 16400  PSET (X + 1,Y + 1),2
  135. 16500  LINE (X + 1,Y + 1)-(X - HZ + 2,Y - VZ + 2),2
  136. 16600  PSET (X - HZ + 2,Y + 1),2
  137. 16700  LINE (X - HZ + 2,Y + 1)-(X + 1,Y - VZ + 2),2
  138. 16800  RETURN
  139. 17000  FOR X = 1 TO MH: FOR Y = 1 TO MV
  140. 17100 M(X,Y) = M(X,Y) + M(X,Y) * 16
  141. 17200  NEXT Y,X
  142. 17500 F =  INT ( RND (1) * 4) + 1
  143. 17600  ON F GOTO 17700,17800,17900,18000
  144. 17700 R = 0:S =  - 1: GOTO 18100
  145. 17800 R = 1:S = 0: GOTO 18100
  146. 17900 R = 0:S = 1: GOTO 18100
  147. 18000 R =  - 1:S = 0
  148. 18100  GOSUB 800
  149. 18300 DEF SEG : POKE 106,0
  150. 18400 IK$=INKEY$
  151. 18410 KEY(12) ON
  152. 18420 KEY(13) ON
  153. 18500 ON KEY(12) GOSUB 19100
  154. 18600 ON KEY(13) GOSUB 19400
  155. 18700 IF IK$ = " " THEN 20100
  156. 18800 IF IK$ = CHR$(27) THEN 21300
  157. 18900 GOTO 18400
  158. 19100 F = F - 1: IF F < 1 THEN F = 4
  159. 19200  GOTO 19500
  160. 19400 F = F + 1: IF F > 4 THEN F = 1
  161. 19500  ON F GOTO 19600,19700,19800,19900
  162. 19600 R = 0:S =  - 1: GOTO 21000
  163. 19700 R = 1:S = 0: GOTO 21000
  164. 19800 R = 0:S = 1: GOTO 21000
  165. 19900 R =  - 1:S = 0: GOTO 21000
  166. 20100 Z = M(H,V)
  167. 20200 T = Z * 2 ^ (F - 1):T =  FN M(T / 128)
  168. 20300  IF T = 0 THEN 20600
  169. 20500   GOTO 18300
  170. 20600 NM = NM + 1: LOCATE 22,24: PRINT "MOVE "NM
  171. 20650 FOR Q=1 TO 500:NEXT
  172. 20700  IF NM < 400 THEN W(NM) = F
  173. 20800 H = H + R:V = V + S
  174. 20900  IF V < 2 THEN 21500
  175. 21000  GOSUB 800
  176. 21100  GOTO 18300
  177. 21300  GOSUB 14700
  178. 21400  GOTO 18300
  179. 21500  CLS : LOCATE 12,5: PRINT "CONGRATS, IT TOOK YOU "NM" STEPS."
  180. 21540  IF CH = 1 THEN  LOCATE 14,8: PRINT "(BUT YOU CHEATED ONCE.)
  181. 21550  IF CH > 1 THEN  LOCATE 14,6: PRINT " (BUT YOU CHEATED ";CH;" TIMES.)"
  182. 21560 FOR I=1 TO 5000:NEXT
  183. 21700 V = V1:H = H1: GOSUB 14700
  184. 21900 X =  INT (H * HZ - HZ / 2) + 1:Y =  INT (V * VZ - VZ / 2) + 1
  185. 22000  PSET (X,Y),1
  186. 22100  FOR N = 1 TO NM
  187. 22200  IF N > 400 THEN 22900
  188. 22300 F = W(N)
  189. 22400  IF F = 1 THEN V = V - 1
  190. 22500  IF F = 2 THEN H = H + 1
  191. 22600  IF F = 3 THEN V = V + 1
  192. 22700  IF F = 4 THEN H = H - 1
  193. 22800  LINE (X,Y)-(INT (H * HZ - HZ / 2) + 1, INT (V * VZ - VZ / 2) + 1),1
  194. 22850 X=INT(H * HZ - HZ/2) + 1:Y=INT(V * VZ -VZ/2) + 1
  195. 22900  NEXT N
  196. 22920 LOCATE 1,1:PRINT "PRESS ANY KEY TO CONTINUE"
  197. 22950 IK$=INKEY$
  198. 23000  KEY(12) OFF:KEY(13) OFF: IF IK$ = "" THEN 22950
  199. 23100  CLEAR:GOTO 3
  200. 50000  REM
  201. Y KEY TO CONTINUE"
  202. 22950 IK$=INKEY$
  203. 23000  KEY(12) OFF:KEY(13) OFF: IF IK$ = "" THEN 22950
  204. 23100  CLEAR:GOT