Listing of file='MAZMAS.BAS;01' on disk='vmedia/games4-sector.ccvf'
0 GOSUB 65000:CLEAR 150:GOTO 55 1 REM 2 PRINT "THE MAZE MASTER" 3 REM 4 PLOT 15,3,16,29 5 REM 6 PRINT "COPYRIGHT 1979 BY DAVID B. SUITS" 7 RETURN 8 REM GENERAL STUDIES 9 REM ROCHESTER INSTITUTE OF TECHNOLOGY 55 MAX= 150 60 DIM CELL(15,20),MM(15,25),PR(14,4),F(2,4),PATH(MAX,2) 65 DEF FN R(R)= INT (R* RND (1))+ 1 70 DEF FN X(X)= (((D= 1)OR (D= 3))- 2* (D= 1))* - ((TEMPAND 2^ D)= 0) 75 DEF FN Y(Y)= (((D= 0)OR (D= 2))- 2* (D= 2))* - ((TEMPAND (2^ D))= 0) 80 DEF FN Z(Z)= (MM(MY(K),MX(K))AND Z)= 0 85 KB= 33278:KF= 33247:P$(1)= "MAZE MASTER":SP$= " " 89 REM GET DATA FOR PRINTING THE MAZE 90 GOSUB 7000 99 REM INSTRUCTIONS 100 GOSUB 9000:P$(2)= LEFT$ (P$(2)+ SP$,11) 119 REM CREATE MAZE 120 PLOT 12:PRINT TAB( 18)"CALCULATING -- STAND BY" 122 PLOT 3,64,0:GOSUB 8000 124 PLOT 3,45,18:PRINT "ENTER A TO ABORT" 125 MOVES= MAX:PLOT 14,3,45,8:PRINT "MOVES LEFT:"MOVES 126 REM NAMES & SCORES 127 GOSUB 1100:PLOT 15 139 REM PRINT PLAYER & MAZE MASTER(S) 140 GOSUB 4100:FOR K= 1TO NUM:GOSUB 4155:NEXT 149 REM SET ALL FLAGS TO ZERO 150 FL= 0:FOR K= 1TO 2:FOR J= 0TO 4:F(K,J)= 0:NEXT J,K 159 REM NO ECHO 160 POKE KF,31:POKE KB,0 196 REM 197 REM 198 REM GET PLAYER'S MOVE 200 PLOT 3,64,0:GOSUB 4000:IF FLTHEN 410 205 LM= MOVES:PATH(MOVES,1)= PY:PATH(MOVES,2)= PX 210 MOVES= MOVES- 1:PLOT 14,6,7,3,56,8:PRINT MOVES" ":PLOT 3,64,0 215 FOR K= 1TO NUM:IF (MX(K)= PX)AND (MY(K)= PY)THEN 320 217 NEXT 220 IF PY= 0THEN SC(2)= SC(2)+ 1:PLOT 14,6,15,3,45,2:PRINT "*** ESCAPE ! ***":GOTO 400 299 REM MOVE MAZE MASTER(S) 300 FOR K= 1TO NUM:TX= MX(K):TY= MY(K):GOSUB 2000 302 IF (MX(K)= MX((K= 2)+ 2))AND (MY(K)= MY((K= 2)+ 2))THEN MX(K)= TX:MY(K)= TY 305 PLOT 15:GOSUB 4150:PLOT 14 310 IF (MX(K)= PX)AND (MY(K)= PY)THEN 320 315 NEXT :IF MOVES= 0THEN PLOT 3,45,2:PRINT "TIME'S UP":GOTO 330 318 GOTO 200 319 REM GAME ENDS 320 PLOT 14,3,49,2:PRINT "CAUGHT !" 330 SC(1)= SC(1)+ 1 399 REM RETURN TO ECHO 400 POKE KF,12 401 REM 402 PLOT 15:FOR K= 1TO NUM:GOSUB 4155:NEXT :GOSUB 1100:PLOT 15 406 GOSUB 8500:GOSUB 11000:GOSUB 4100:FOR K= 1TO NUM:GOSUB 4150:NEXT 410 PLOT 15,3,45,18:PRINT "CARE TO " 420 PLOT 3,45,19:INPUT "PLAY AGAIN? ";A$ 430 IF LEFT$ (A$,1)= "Y"THEN 120 440 IF LEFT$ (A$,1)< > "N"THEN 420 448 REM 449 REM 450 LOAD "MENU":RUN 451 REM 1099 REM NAMES & SCORES 1100 PLOT 14:FOR J= 1TO 2:PLOT 6,2* J- 1,3,45,25+ J* 2:PRINT P$(J)":"SC(J):NEXT :RETURN 1998 REM MOVE MAZE MASTER(S) 1999 REM FIRST CHECK FOR CUL-DE-SAC 2000 TEMP= MM(MY(K),MX(K)):N= 0:FOR J= 0TO 3:IF FN Z(2^ J)THEN N= N+ 1:D= J 2010 NEXT :IF N> 1THEN 2200 2019 REM CUL-DE-SAC, SO MOVE OUT & CLOSE IT OFF 2020 MX(K)= MX(K)+ FN X(D):MY(K)= MY(K)+ FN Y(D) 2025 D= D- 2* (D< 2)+ 2* (D> 1) 2030 MM(MY(K),MX(K))= (MM(MY(K),MX(K))OR 2^ D) 2035 FOR J= 0TO 4:F(K,J)= 0:NEXT :RETURN 2199 REM NOT A CUL-DE-SAC, SO FIND BEST MOVE 2200 IF ABS (PX- MX(K))> ABS (PY- MY(K))THEN 2265 2255 IF MY(K)< PYTHEN 2350 2260 IF MY(K)< > PYTHEN 2300 2265 IF MX(K)< PXTHEN 2325 2270 IF F(K,4)= 0THEN 2295 2275 IF F(K,4)= > 3THEN 2290 2280 F(K,4)= F(K,4)+ 1:F(K,0)= F(K,0)+ 1:IF F(K,0)< 4THEN 2300 2285 GOTO 2390 2290 F(K,4)= 0 2295 IF FN Z(8)THEN MX(K)= MX(K)- 1:F(K,2)= F(K,2)+ 1:GOTO 2385 2300 IF F(K,1)= 0THEN 2320 2305 IF F(K,1)= > 3THEN F(K,1)= 0:GOTO 2320 2310 F(K,1)= F(K,1)+ 1:F(K,0)= F(K,0)+ 1:IF F(K,0)< 4THEN 2325 2315 GOTO 2390 2320 IF FN Z(1)THEN MY(K)= MY(K)- 1:F(K,3)= F(K,3)+ 1:GOTO 2380 2325 IF F(K,2)= 0THEN 2345 2330 IF F(K,2)= > 3THEN F(K,2)= 0:GOTO 2345 2335 F(K,2)= F(K,2)+ 1:F(K,0)= F(K,0)+ 1:IF F(K,0)< 4THEN 2390 2340 GOTO 2350 2345 IF FN Z(2)THEN MX(K)= MX(K)+ 1:F(K,4)= F(K,4)+ 1:GOTO 2385 2350 IF F(K,3)= 0THEN 2370 2355 IF F(K,3)= > 3THEN F(K,3)= 0:GOTO 2370 2360 F(K,3)= F(K,3)+ 1:F(K,0)= F(K,0)+ 1:IF F(K,0)< 4THEN 2270 2365 GOTO 2390 2370 IF NOT FN Z(4)THEN 2270 2375 MY(K)= MY(K)+ 1:F(K,1)= F(K,1)+ 1 2380 F(K,2)= 0:F(K,4)= 0:GOTO 2390 2385 F(K,1)= 0:F(K,3)= 0 2390 RETURN 3999 REM GET PLAYER'S MOVE 4000 REM 4010 D= PEEK (KB):IF D= 0THEN 4010 4012 IF D= 28THEN D= 0:GOTO 4030 4013 IF D= 25THEN D= 1:GOTO 4030 4014 IF D= 10THEN D= 2:GOTO 4030 4015 IF D= 26THEN D= 3:GOTO 4030 4016 IF D= 8THEN 4030 4017 IF D= 65THEN FL= - 1:RETURN 4018 GOTO 4010 4029 REM MOVE PLAYER 4030 POKE KB,0:PLOT 15,3,127,PX* 2,PY* 2,3,58 4040 IF D= 8THEN 4100 4050 TEMP= CELL(PY,PX):PX= PX+ FN X(D):PY= PY+ FN Y(D) 4099 REM PRINT PLAYER 4100 PLOT 3,127,PX* 2,PY* 2,3,107,27,27:RETURN 4149 REM PRINT MAZE MASTER(S) 4150 PLOT 3,127,TX* 2,TY* 2,1,32 4155 PLOT 3,127,MX(K)* 2,MY(K)* 2,1,42- (K= 2),27,27:RETURN 6999 REM DATA FOR PRINTING MAZE 7000 RESTORE 7020:FOR J= 0TO 14:FOR K= 1TO 4 7010 READ PR(J,K):NEXT K,J:RETURN 7020 DATA 32,32,32,32,101,101,32,32,32,98,32,98,101,111 7022 DATA 32,98,32,32,127,127,101,101,127,127,32,98,127 7024 DATA 109,101,111,127,109,97,32,97,32,110,101,97,32 7026 DATA 97,98,97,98,110,111,97,98,97,32,108,127,110 7028 DATA 101,108,127,97,98,108,109 7998 REM CREATE MAZE 7999 REM GET 12 BLOCKS OF 25 CELLS EACH 8000 R= FN R(20):IF R> 10THEN GOSUB 8008:GOTO 8004 8002 ON RGOSUB 8020,8021,8022,8023,8024,8025,8026,8027,8028,8029 8004 FOR J= 1TO 12:FOR K= 1TO 25 8005 READ MM(J,K):IF MM(J,K)= 255THEN RESTORE 8300:GOTO 8005 8006 NEXT K,J:GOTO 8040 8008 ON R- 10GOSUB 8010,8011,8012,8013,8014,8015,8016,8017,8018,8019:RETURN 8010 RESTORE 8300:RETURN 8011 RESTORE 8310:RETURN 8012 RESTORE 8320:RETURN 8013 RESTORE 8330:RETURN 8014 RESTORE 8340:RETURN 8015 RESTORE 8350:RETURN 8016 RESTORE 8360:RETURN 8017 RESTORE 8370:RETURN 8018 RESTORE 8380:RETURN 8019 RESTORE 8390:RETURN 8020 RESTORE 8400:RETURN 8021 RESTORE 8410:RETURN 8022 RESTORE 8420:RETURN 8023 RESTORE 8430:RETURN 8024 RESTORE 8440:RETURN 8025 RESTORE 8450:RETURN 8026 RESTORE 8460:RETURN 8027 RESTORE 8470:RETURN 8028 RESTORE 8480:RETURN 8029 RESTORE 8490:RETURN 8039 REM MIX UP THE ORDER OF THE 12 BLOCKS 8040 FOR J= 1TO 12:R= FN R(12):FOR K= 1TO 25 8050 TEMP= MM(R,K):MM(R,K)= MM(J,K):MM(J,K)= TEMP 8060 NEXT K,J 8099 REM PUT THEM INTO THE FINAL 15 X 20 CELL ARRAY 8100 FOR U= 0TO 2:FOR V= 0TO 3:FOR W= 1TO 25:TE= INT ((W- 1)/ 5) 8110 Y= TE+ 5* U+ 1:X= 5* V+ (W- 5* TE):J= V+ INT ((Y+ 4)/ 5)+ 3* U 8120 CELL(Y,X)= MM(J,W):NEXT W,V,U 8199 REM MAKE SURE THERE'S A WALL AROUND THE WHOLE MAZE 8200 FOR X= 1TO 20:CELL(1,X)= CELL(1,X)OR 1 8210 CELL(15,X)= CELL(15,X)OR 4:NEXT 8220 FOR Y= 1TO 15:CELL(Y,1)= CELL(Y,1)OR 8 8230 CELL(Y,20)= CELL(Y,20)OR 2:NEXT 8234 REM COPY THE MAZE INTO MAZE MASTER'S DUPLICATE MAZE 8235 FOR J= 1TO 15:FOR K= 1TO 20:MM(J,K)= CELL(J,K):NEXT K,J 8249 REM FIND THE EXIT 8250 EXIT= FN R(20):CELL(1,EXIT)= CELL(1,EXIT)AND 14 8259 REM DRAW THE OUTSIDE BORDER 8260 PLOT 8,11,6,4,2,4* EXIT- 3,124,242,1,124,1,3,82,3,82,124,4* EXIT+ 2,124,255 8279 REM FIND A STARTING POINT FOR PLAYER 8280 PX= FN R(20):PY= FN R(3)+ 12 8289 REM PUT MAZE MASTER AT EXIT & FIND A PLACE FOR HIS UNCLE 8290 MX(1)= EXIT:MY(1)= 1:MY(2)= FN R(4)+ 1 8292 MX(2)= FN R(20):IF MX(2)= MX(1)THEN 8292 8295 RETURN 8298 REM DATA FOR 5 X 5 BLOCKS 8300 DATA 9,4,5,2,11,2,9,3,14,8,10,10,12,5,6 8302 DATA 2,12,1,5,1,12,1,6,9,6 8310 DATA 11,12,3,8,3,4,3,10,14,8,11,10,8,5,2 8312 DATA 2,10,10,11,12,12,0,4,0,7 8320 DATA 9,4,5,4,7,0,5,1,5,1,10,11,10,11,10 8322 DATA 2,10,10,8,0,14,8,6,10,14 8330 DATA 9,4,5,4,3,4,5,5,7,8,9,5,5,5,6 8332 DATA 2,13,5,5,1,12,1,5,1,6 8340 DATA 11,8,5,4,3,4,6,9,3,8,13,5,6,10,10 8342 DATA 1,5,1,6,8,12,3,12,1,6 8350 DATA 11,12,1,4,3,0,3,10,13,0,14,10,12,7,10 8352 DATA 1,4,1,5,0,14,9,4,3,14 8360 DATA 13,0,5,0,7,5,6,13,4,5,11,11,13,5,3 8362 DATA 2,8,5,5,0,12,2,13,1,6 8370 DATA 9,0,5,4,3,2,12,3,11,8,12,3,12,2,10 8372 DATA 3,12,5,6,8,12,1,5,1,6 8380 DATA 9,4,5,4,3,0,1,7,13,0,14,12,3,13,2 8382 DATA 3,13,4,3,8,12,1,5,2,14 8390 DATA 9,4,5,4,3,2,9,5,7,8,10,12,5,5,6 8392 DATA 0,5,5,5,5,12,1,5,1,7 8400 DATA 9,4,5,4,3,4,5,1,5,4,9,5,4,5,3 8402 DATA 4,5,1,5,4,13,1,4,1,7 8410 DATA 9,2,9,4,3,6,8,6,9,4,9,6,9,6,11 8412 DATA 6,9,6,11,8,13,0,5,0,6 8420 DATA 9,4,5,4,3,2,9,5,3,8,10,10,11,10,10 8422 DATA 2,12,6,10,8,12,1,5,0,6 8430 DATA 11,12,1,4,7,4,5,4,5,5,13,5,5,5,3 8432 DATA 1,5,5,5,4,12,1,5,1,7 8440 DATA 9,2,9,2,11,2,10,10,10,8,10,10,10,10,10 8442 DATA 2,10,10,10,8,14,8,6,8,6 8450 DATA 9,4,1,4,3,6,11,12,3,12,13,0,5,0,7 8452 DATA 5,6,11,12,1,13,1,4,1,6 8460 DATA 9,4,5,4,3,2,9,1,3,8,14,10,14,10,14 8462 DATA 3,12,1,6,9,12,1,4,1,6 8470 DATA 9,4,5,4,3,2,9,5,3,8,10,12,7,10,10 8472 DATA 4,5,5,6,8,13,1,5,1,6 8480 DATA 9,6,11,12,3,2,11,10,11,8,10,10,10,10,10 8482 DATA 2,10,10,10,8,12,0,4,0,6 8490 DATA 13,4,5,4,3,3,9,3,11,8,8,2,14,10,10 8492 DATA 2,12,5,6,8,12,1,5,1,6,255 8499 REM PRINT THE MAZE 8500 PLOT 15,20,30,3,1,1 8510 FOR Y= 1TO 15:FOR X= 1TO 20 8520 PLOT PR(CELL(Y,X),1),PR(CELL(Y,X),2),26,26,10 8530 PLOT PR(CELL(Y,X),3),PR(CELL(Y,X),4),28 8540 NEXT X:PLOT 13,10,10,25:NEXT Y:PLOT 29:RETURN 8999 REM INSTRUCTIONS 9000 PLOT 14,6,4,27,24,27,25,43,6,3,3,24,3:GOSUB 2 9005 PLOT 3,64,0:K= PEEK (33209):FOR J= 1TO K:R= RND (1):NEXT 9010 PLOT 3,0,6:INPUT "CARE FOR INSTRUCTIONS? ";A$ 9012 IF LEFT$ (A$,1)= "N"THEN PRINT :PRINT :PRINT :GOTO 9185 9015 PLOT 3,0,6:PRINT "THE OBJECT OF THIS GAME IS TO EXIT FROM THE MAZE." 9020 PRINT "YOU ARE REPRESENTED BY THE k , AND YOU MOVE UP, DOWN, RIGHT," 9030 PRINT "OR LEFT BY USING THE APPROPRIATE ARROW KEYS ON THE KEY BOARD." 9040 PRINT "( HOME = STAY PUT.) ENTER A TO ABORT THE GAME." 9045 PRINT :PRINT 9050 INPUT "PRESS RETURN WHEN YOU'RE READY TO BEGIN ";A$ 9060 GOSUB 9500 9070 PRINT "OH YEAH. I ALMOST FORGOT....":PRINT :PRINT 9080 PRINT "THIS IS A 'BLIND' MAZE. THAT IS, YOU WON'T BE ABLE TO TELL" 9090 PRINT "WHERE THE WALLS ARE UNTIL YOU BUMP INTO THEM.":PRINT :PRINT 9100 PRINT "IN ADDITION, YOU HAVE A MAXIMUM OF"MAX" MOVES. IF YOU DON'T" 9105 PRINT "FIND YOUR WAY OUT OF THE MAZE BY THEN, YOU LOSE." 9108 PRINT :PRINT 9110 INPUT "PRESS RETURN WHEN YOU'RE READY TO BEGIN ";A$ 9120 GOSUB 9500 9130 PRINT "OOPS! JUST ONE MORE THING....":PRINT :PRINT 9140 PRINT "THE MAZE IS PATROLLED BY THE MAZE MASTER: *." 9150 PRINT "BE VERY CAREFUL! IF HE CATCHES YOU, YOU LOSE THE GAME." 9160 PRINT :PRINT :INPUT "PRESS RETURN WHEN YOU'RE READY TO BEGIN ";A$ 9170 GOSUB 9500 9180 PRINT "BY THE WAY, "; 9185 INPUT "WHAT'S YOUR NAME? ";P$(2) 9190 PRINT :PRINT 9200 PRINT "IN THE ADVANCED VERSION OF THE GAME, THE MAZE MASTER HAS" 9210 PRINT "AN UNCLE, +, WHO ALSO PATROLS THE MAZE.":PRINT 9220 PRINT :INPUT "CARE TO PLAY THE ADVANCED VERSION? ";A$ 9230 NUM= 1- (LEFT$ (A$,1)= "Y"):RETURN 9499 REM 9500 PLOT 12,3,64,0:FOR J= 1TO 700:NEXT :PLOT 14,6,4,27,25,43,15,19,3,0,5:RETURN 10999 REM RETRACE PLAYER'S MOVES 11000 PLOT 3,64,0:FOR J= MAXTO LMSTEP - 1:FOR K= 32TO 58STEP 26 11010 PLOT 3,127,PATH(J,2)* 2,PATH(J,1)* 2,3,K 11030 NEXT K:FOR I= 1TO 25:NEXT I,J:PLOT 27,27:RETURN 11040 REM 64999 REM BEN BARLOW'S NO-ECHO PATCH 65000 TM= PEEK (32941)* 256+ PEEK (32940)- 7 65005 RESTORE 65005:DATA 245,175,50,255,129,241,201 65010 FOR J= 0TO 6:READ DA:POKE TM+ 1+ J,DA:NEXT 65015 BR= INT (TM/ 256):POKE 33221,195:POKE 33222,TM- BR* 256+ 1:POKE 33223,BR 65020 POKE 32941,BR:POKE 32940,TM- BR* 256 65025 RETURN