Compucolor.org – Virtual Media

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