home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib42b.dsk / MAZE.MAKER.bas < prev    next >
BASIC Source File  |  2023-02-26  |  9KB  |  140 lines

  1. 1  REM  ************************
  2. 2  REM  *      MAZE MAKER      *
  3. 3  REM  *    BY MIKE ROHRER    *
  4. 4  REM  *  COPYRIGHT (C) 1992  *
  5. 5  REM  * MINDCRAFT PUBL. CORP.*
  6. 6  REM  *   LINCOLN, MA 01773  *
  7. 7  REM  ************************
  8. 10  GOTO 450
  9. 20  REM  ### MAZE MAKER CURSOR MOVES ###
  10. 30  REM  MOVE RIGHT
  11. 40  IF DR = 2  OR DN = 2  THEN  RETURN 
  12. 50  FOR I = 1 TO LE: IF X >260  THEN 70
  13. 60 X = X +1: GOSUB 260:X = X +9:DN = DR:DR = 1
  14. 70  NEXT : IF X >260  AND Y <10  THEN  POP : HCOLOR= 3: HPLOT 269,0 TO 269,10:X = X -10: GOTO 670: REM  KEEPS CURSOR FROM ENDING AT UPPER RIGHT HAND CORNER
  15. 80  IF X >260  THEN  POP :XX = X +3:YY = Y +3: GOTO 700
  16. 90  RETURN 
  17. 100  REM  MOVE LEFT
  18. 110  IF DR = 1  OR DN = 1  THEN  RETURN 
  19. 120  FOR I = 1 TO LE: IF X <13  THEN 140
  20. 130 X = X -1: GOSUB 260:X = X -9:DN = DR:DR = 2
  21. 140  NEXT : RETURN 
  22. 150  REM  MOVE UP
  23. 160  IF DR = 4  OR DN = 4  THEN  RETURN 
  24. 170  FOR I = 1 TO LE: IF Y <9  THEN 190
  25. 180 Y = Y -1: GOSUB 260:Y = Y -8:DN = DR:DR = 3
  26. 190  NEXT : RETURN 
  27. 200  REM  MOVE DOWN
  28. 210  IF DR = 3  OR DN = 3  THEN  RETURN 
  29. 220  FOR I = 1 TO LE: IF Y >180  THEN 240
  30. 230 Y = Y +1: GOSUB 260:Y = Y +8:DN = DR:DR = 4
  31. 240  NEXT : RETURN 
  32. 250  REM  ### DRAW AND ERASE ###
  33. 260  HCOLOR= 3: DRAW 1 AT X,Y: FOR J = 1 TO 2:Z =  PEEK(BZ): NEXT : HCOLOR= 0: DRAW 1 AT X,Y: RETURN 
  34. 270  REM  ### PADDLE CONTROLLED CURSOR MOVES ###
  35. 280  REM  MOVE LEFT
  36. 290  IF X <10  THEN X = X +1: POP : ON MD GOTO 880,1040
  37. 300  XDRAW 1 AT XO,YO: XDRAW 1 AT X,Y: IF  PEEK(234) = NUM  THEN  XDRAW 1 AT X,Y:X = X -9: XDRAW 1 AT X,Y:XO = X: RETURN 
  38. 310  XDRAW 1 AT X,Y:X = X +1: XDRAW 1 AT X,Y: RETURN 
  39. 320  REM  MOVE RIGHT
  40. 330  IF X >260  THEN X = X -1: POP : ON MD GOTO 880,1040
  41. 340  XDRAW 1 AT XO,YO: XDRAW 1 AT X,Y: IF  PEEK(234) = NUM  THEN  XDRAW 1 AT X,Y:X = X +9: XDRAW 1 AT X,Y:XO = X: RETURN 
  42. 350  XDRAW 1 AT X,Y:X = X -1: XDRAW 1 AT X,Y: RETURN 
  43. 360  REM  MOVE UP
  44. 370  IF Y <9  THEN Y = Y +1: POP : ON MD GOTO 880,1040
  45. 380  XDRAW 1 AT XO,YO: XDRAW 1 AT X,Y: IF  PEEK(234) = NUM  THEN  XDRAW 1 AT X,Y:Y = Y -8: XDRAW 1 AT X,Y:YO = Y: RETURN 
  46. 390  XDRAW 1 AT X,Y:Y = Y +1: XDRAW 1 AT X,Y: RETURN 
  47. 400  REM  MOVE DOWN
  48. 410  IF Y >180  THEN Y = Y -1: POP : ON MD GOTO 880,1040
  49. 420  XDRAW 1 AT XO,YO: XDRAW 1 AT X,Y: IF  PEEK(234) = NUM  THEN  XDRAW 1 AT X,Y:Y = Y +8: XDRAW 1 AT X,Y:YO = Y: RETURN 
  50. 430  XDRAW 1 AT X,Y:Y = Y -1: XDRAW 1 AT X,Y: RETURN 
  51. 440  REM  ### INTRO ###
  52. 450  HGR : TEXT : HOME : PRINT  CHR$(21)
  53. 460 AP$ = ": APPLE MAZE MAKER :":MX$ = "MX-80":CR$ = " * * * * * COPYRIGHT (C) 1992  * * * * * * * * * * MINDCRAFT PUBL. CORP. * * * *":BZ =  -16336:NUM = 72:B$ =  CHR$(7)
  54. 470  FOR I = 1 TO 4: READ L$(I): NEXT 
  55. 480  DATA  "I","J","K","M"
  56. 490  VTAB 23: HTAB 11: INVERSE : PRINT AP$: NORMAL : FOR I = 1 TO 800: NEXT 
  57. 500  FOR I = 1 TO 16: CALL  -912: FOR J = 1 TO 11 -I/2:Z =  PEEK(BZ): NEXT : NEXT : FOR I = 1 TO 750: NEXT : REM  SCROLLS THE SCREEN
  58. 510  VTAB 8: SPEED= 175: PRINT : PRINT  TAB( 20)"BY": FOR I = 1 TO 2:Z =  PEEK(BZ): NEXT : PRINT : PRINT  TAB( 15)"MIKE ROHRER": FOR I = 1 TO 2:Z =  PEEK(BZ): NEXT : FOR I = 1 TO 500: NEXT : VTAB 20: PRINT CR$: SPEED= 255
  59. 520 D$ =  CHR$(4):I$ =  CHR$(9): REM  CTRL-D/I
  60. 530  PRINT D$"BLOAD HIRES.DUMP2": REM  A$6000,L$10E
  61. 540  PRINT D$"BLOAD MAZE.SHAPES": REM  A$4000,L$76
  62. 550  POKE 232,0: POKE 233,64: REM POINTER TO SHAPE TABLE START
  63. 560  REM  ### SET UP SCREEN ###
  64. 570  HGR : POKE  -16302,0: HCOLOR= 3: ROT= 0: SCALE= 1
  65. 580  FOR I = 0 TO 26: HPLOT 9 +10 *I,0 TO 9 +10 *I,189: NEXT : FOR I = 0 TO 21: HPLOT 9,9 *I TO 269,9 *I: NEXT 
  66. 590 X = 9
  67. 600  HCOLOR= 0:YO = ( INT( RND(1) *21) +1) *9 -1:Y = YO: DRAW 1 AT X,Y: HCOLOR= 3: DRAW 2 AT 0,Y:X = 10
  68. 610  REM  ### SEND MAZE MAKER CURSOR THRU THE SCREEN ###
  69. 620  HOME : VTAB 21: FOR I = 1 TO 900: NEXT : POKE  -16301,0:Z =  PEEK(BZ) + PEEK(BZ)
  70. 630  PRINT : PRINT : PRINT  TAB( 3)"LEVEL OF DIFFICULTY ===>";: POKE 32,28: PRINT : VTAB 22: PRINT "A. EASY": PRINT "B. MEDIUM": PRINT "C. HARD ";: POKE 32,0
  71. 640  GET A$:A =  ASC(A$): IF A <65  OR A >67  THEN 640
  72. 650 LN = (67 -A) +2 *(67 -A): POKE  -16302,0
  73. 660 DIR = 1:LE =  INT( RND(1) *LN) +2: GOTO 680
  74. 670 DIR =  INT( RND(1) *25) +1:LE =  INT( RND(1) *LN) +2: REM SET DIRECTION/LENGTH OF MAZE MAKER CURSOR PATH  
  75. 680  ON DIR GOSUB 40,40,40,40,40,40,40,40,40,40,110,110,110,160,160,160,160,160,160,210,210,210,210,210,210: GOTO 670
  76. 690  REM  ### COMPLETE MAZE WITH RANDOM ERASURES ###
  77. 700  HOME : FOR I = 1 TO 1500: NEXT : POKE  -16301,0: VTAB 22: HTAB 13: PRINT "CONTINUE? (Y/N) ";: GET A$: IF A$ < >"Y"  AND A$ < >"N"  THEN 700
  78. 710  POKE  -16302,0: HOME : IF A$ = "N"  THEN 570
  79. 720  FOR I = 1 TO 125: HCOLOR= 0:Y = ( INT( RND(1) *21) +1) *9 -1:X = ( INT( RND(1) *25) +1) *10 +8: DRAW 1 AT X,Y: NEXT 
  80. 730  FOR I = 1 TO 275: HCOLOR= 0:Y = ( INT( RND(1) *20) +1) *9:X = ( INT( RND(1) *26) +1) *10: DRAW 1 AT X,Y: NEXT 
  81. 740  HCOLOR= 3: DRAW 3 AT XX,YY: FOR I = 1 TO 12:Z =  PEEK(BZ): NEXT : FOR I = 1 TO 4000: NEXT : HOME 
  82. 750  POKE  -16301,0: VTAB 22: HTAB 9: POKE  -16368,0: PRINT "SEND TO PRINTER? (Y/N) ";: GET A$: IF A$ < >"Y"  AND A$ < >"N"  THEN 750
  83. 760  IF A$ = "Y"  THEN 1110
  84. 770  HOME : VTAB 21: HTAB 1: POKE  -16368,0: PRINT "MAKE A SELECTION:  M. CREATE A NEW MAZE": HTAB 20: PRINT "S. SOLVE MAZE ON": HTAB 25: PRINT "SCREEN": HTAB 20: PRINT "E. END PROGRAM";
  85. 780  VTAB 24: HTAB 9: PRINT ">>---> ";: GET A$: IF A$ < >"M"  AND A$ < >"E"  AND A$ < >"S"  THEN 780
  86. 790  IF A$ = "E"  THEN 1320
  87. 800  IF A$ = "M"  THEN 570
  88. 810  HOME : VTAB 22: HTAB 10: PRINT "TYPE 'P' FOR PADDLES": HTAB 15: PRINT "'K' FOR KEYBOARD ";
  89. 820  GET A$: POKE  -16368,0: IF A$ < >"P"  AND A$ < >"K"  THEN 820
  90. 830  IF A$ = "K"  THEN MD = 2: GOTO 940
  91. 840  HOME : VTAB 22: HTAB 7: FOR I = 1 TO 500: NEXT : PRINT "(PDL #0 ----> RIGHT & LEFT)":Z =  PEEK(BZ) + PEEK(BZ)
  92. 850  FOR I = 1 TO 2000: NEXT : PRINT : HTAB 7: PRINT "(PDL #1 ----> UP & DOWN)";:Z =  PEEK(BZ) + PEEK(BZ): FOR I = 1 TO 3000: NEXT 
  93. 860  REM  ### SOLVE MAZE WITH PADDLES ###
  94. 870  POKE  -16302,0:MD = 1:XO = 10:X = XO:Y = YO: XDRAW 1 AT X,Y
  95. 880  IF  PDL(0) <30  THEN X = X -1: GOSUB 290
  96. 890  IF  PDL(0) >220  THEN X = X +1: GOSUB 330
  97. 900  IF  PDL(1) <30  THEN Y = Y -1: GOSUB 370
  98. 910  IF  PDL(1) >220  THEN Y = Y +1: GOSUB 410
  99. 920  IF (X = XX -13  AND Y = YY -3)  OR (( PEEK(234) = 1  OR  PEEK(234) = 64)  AND (X = XX -13  AND Y = YY +6))  OR (X = XX -13  AND Y = YY +6  AND  PDL(1) <30)  THEN 1000: REM APPLE BITTEN
  100. 930  FOR I = 1 TO 100: NEXT : GOTO 880
  101. 940  REM  ### SOLVE MAZE WITH KEYBOARD ###
  102. 950  HOME : HTAB 7: VTAB 22: PRINT  CHR$(7)"USE THESE KEYS ";: SPEED= 50: FOR I = 1 TO 4: PRINT "=";:Z =  PEEK(BZ) + PEEK(BZ) + PEEK(BZ): NEXT : PRINT ">": SPEED= 255
  103. 960  FOR J = 1 TO 5
  104. 970  FOR I = 1 TO 4: VTAB 21 +1 *(I = 2  OR I = 3) +2 *(I = 4): HTAB 30 -1 *(I = 2) +1 *(I = 3): INVERSE : PRINT L$(I): NORMAL :Z =  PEEK(BZ): NEXT 
  105. 980  FOR I = 1 TO 4: VTAB 21 +1 *(I = 2  OR I = 3) +2 *(I = 4): HTAB 30 -1 *(I = 2) +1 *(I = 3): PRINT L$(I):Z =  PEEK(BZ): NEXT I,J
  106. 990  FOR I = 1 TO 1000: NEXT : GOSUB 1030
  107. 1000  TEXT : HOME : FOR I = 1 TO 5: VTAB 6 +I *2: HTAB 12: INVERSE : PRINT AP$: NORMAL : PRINT B$ +B$: NEXT 
  108. 1010  FOR I = 1 TO 1500: NEXT 
  109. 1020  PRINT B$: GOTO 1300
  110. 1030  POKE  -16302,0:XO = 10:X = XO:Y = YO: XDRAW 1 AT X,Y
  111. 1040  GET A$: IF A$ < >"I"  AND A$ < >"K"  AND A$ < >"M"  AND A$ < >"J"  THEN 1040
  112. 1050  IF A$ = "J"  THEN X = X -1: GOSUB 290
  113. 1060  IF A$ = "K"  THEN X = X +1: GOSUB 330
  114. 1070  IF A$ = "I"  THEN Y = Y -1: GOSUB 370
  115. 1080  IF A$ = "M"  THEN Y = Y +1: GOSUB 410
  116. 1090  IF (X = XX -13  AND Y = YY -3)  OR (( PEEK(234) = 1  OR  PEEK(234) = 64)  AND (X = XX -13  AND Y = YY +6))  OR (X = XX -13  AND Y = YY +6  AND A$ = "I")  THEN  RETURN : REM  APPLE BITTEN
  117. 1100  FOR I = 1 TO 100: NEXT : GOTO 1040
  118. 1110  TEXT : HOME 
  119. 1120  REM  ### PRINT ROUTINE ###
  120. 1130  PRINT 
  121. 1140  VTAB 12: POKE  -16368,0: PRINT "TURN ON ";MX$;" AND PRESS RETURN ";: GET A$
  122. 1150  POKE  -16304,0: POKE  -16297,0: POKE  -16300,0: POKE  -16302,0: REM  SHOW MAZE AGAIN 
  123. 1160 HR = 32
  124. 1170 NI = 0
  125. 1180 TB = 8
  126. 1190  POKE 27,NI: POKE 23,HR: PRINT 
  127. 1200  PRINT D$"PR#1"
  128. 1210  PRINT I$;"80N"
  129. 1220  PRINT  CHR$(27) CHR$(61);: REM  CLEAR MOST SIG BIT
  130. 1230  PRINT  CHR$(27) CHR$(68) CHR$(TB) CHR$(0);: REM  SET TAB
  131. 1240  PRINT  CHR$(27) CHR$(65) CHR$(7);: REM  ST 7/72 IN LINE SPACING
  132. 1250  CALL 24576: REM  CALL THE MACHINE LANG PROG AT $6000
  133. 1260  PRINT  CHR$(27) CHR$(64): REM  RESET PRINTER TO DEFAULT SETTINGS
  134. 1270  PRINT I$;"0"
  135. 1280  PRINT D$"PR#0"
  136. 1290  POKE  -16301,0: REM  MIXED TEXT/GRAPHICS
  137. 1300  VTAB 22: HTAB 9: POKE  -16368,0: PRINT "MAKE ANOTHER MAZE? (Y/N) ";: GET A$: IF A$ < >"Y"  AND A$ < >"N"  THEN 1300
  138. 1310  IF A$ = "Y"  THEN 570
  139. 1320  TEXT : HOME : VTAB 10: HTAB 19: INVERSE : PRINT "BYE": NORMAL 
  140. 1330  FOR I = 10 TO 22: VTAB I: HTAB 26 -I: INVERSE : PRINT " ";: FOR J = 1 TO 10: NEXT : NORMAL : PRINT  CHR$(8) +" ":Z =  PEEK(BZ): NEXT