Listing of file='LABRIN.BAS;01' on disk='vmedia/chip_1-sector.ccvf'
0 REM LABYRINTH BY TOM HUDSON, 2369 E. SEMINOLE, SPRINGFIELD MO. 65804 (417)883-0727 1 GOSUB 30000:PLOT 30,16,29,22,15 2 PLOT 12,29,19:INPUT "ENTER MAZE SIZE ( X,Y ) ";MX,MY:MX= INT (MX)+ 1:MY= INT (MY)+ 1 3 IF MX< 11OR MY< 11OR MX> 64OR MY> 32THEN 2 4 RS= PEEK (33209)+ PEEK (33210):IF RS= 0THEN 4 5 N= RND (- RS) 7 XT= 2:YT= 2 8 EL= MY/ 2:MO= INT (SQR (MX+ MY)/ 4+ .8) 10 PLOT 30,16,12 12 PLOT 27,88:PLOT 15 15 RESTORE 20000 20 DIM A(MX+ 2,MY+ 2),CX(24),CY(24):FOR X= 1TO 24:READ CX(X),CY(X):NEXT X 30 DEF FN R(RN)= INT (RN* RND (1)) 50 A(1,1)= 1 60 PLOT 30,18,3,1,1,32,30,17,29,23 75 X= 1:Y= 1 80 IF X+ Y= 3THEN 600 82 IF RND (1)> .7THEN SD= SD+ 1:IF SD< 7THEN D= LD:GOSUB 165:IF GM= 1THEN 100 83 SD= 0:D= FN R(4) 85 GOSUB 165 100 IF GM= 1AND TX< MXAND TX> - 1AND TY< MYAND TY> - 1THEN 150 110 NM= NM+ 1:IF NM> 4THEN NM= 0:GOTO 500 120 GOTO 80 150 A(TX,TY)= 1:X= TX:Y= TY:PLOT 3,X,Y,32 153 LD= D 155 NM= 0 157 IF EF= 0AND X= (MX- 1)AND Y> ELTHEN 200 160 GOTO 80 163 REM 165-190 PRE-CHECKS DIRECTION BEFORE TESTING FOR GM 165 IF D= 0AND X< MXAND Y> 0THEN GOSUB 1000:RETURN 170 IF D= 1AND X> 0AND Y< (MY- 1)THEN GOSUB 2000:RETURN 175 IF D= 2AND X> 1AND Y> 0THEN GOSUB 3000:RETURN 180 IF D= 3AND Y> 1AND X> 0THEN GOSUB 4000:RETURN 190 RETURN 200 EF= 1:A(X,Y)= 2:PLOT 30,21,3,X,Y,32,30,17 205 EX= X:EY= Y 491 REM THIS ROUTINE STARTS A NEW CORRIDOR AFTER ONE DEAD-ENDS 500 FOR XT= XTTO (MX- 2):FOR YT= YTTO (MY- 2) 507 PLOT 3,XT,YT,42 510 IF A(XT,YT)= 1THEN X= XT:Y= YT:GOTO 520 515 PLOT 30,16,3,XT,YT,32,17 517 GOTO 570 520 GOSUB 1000:IF GM= 1THEN D= 0:GOTO 85 530 GOSUB 2000:IF GM= 1THEN D= 1:GOTO 85 540 GOSUB 3000:IF GM= 1THEN D= 2:GOTO 85 550 GOSUB 4000:IF GM= 1THEN D= 3:GOTO 85 560 PLOT 3,XT,YT,32 570 NEXT YT:YT= 2:NEXT XT 580 IF EF= 0THEN PLOT 30,16,29,17,12:PRINT "PROGRAM ERROR - NO END":END 590 GOTO 10000 600 IF X= 2THEN D= 1:GOTO 85 610 D= 0:GOTO 85 980 REM LINES 1000-4000 CHECK IF A DIRECTION IS VALID 1000 T= A(X+ 1,Y+ 1)+ A(X+ 2,Y+ 1)+ A(X+ 1,Y)+ A(X+ 2,Y)+ A(X+ 1,Y- 1)+ A(X+ 2,Y- 1):IF T= 0THEN 1200 1010 GM= 0:RETURN 1200 GM= 1:TX= X+ 1:TY= Y:RETURN 2000 T= A(X- 1,Y+ 1)+ A(X- 1,Y+ 2)+ A(X,Y+ 1)+ A(X,Y+ 2)+ A(X+ 1,Y+ 1)+ A(X+ 1,Y+ 2):IF T= 0THEN 2200 2010 GM= 0:RETURN 2200 GM= 1:TX= X:TY= Y+ 1:RETURN 3000 T= A(X- 2,Y+ 1)+ A(X- 1,Y+ 1)+ A(X- 2,Y)+ A(X- 1,Y)+ A(X- 2,Y- 1)+ A(X- 1,Y- 1):IF T= 0THEN 3200 3010 GM= 0:RETURN 3200 GM= 1:TX= X- 1:TY= Y:RETURN 4000 T= A(X- 1,Y- 1)+ A(X- 1,Y- 2)+ A(X,Y- 1)+ A(X,Y- 2)+ A(X+ 1,Y- 1)+ A(X+ 1,Y- 2):IF T= 0THEN 4200 4010 GM= 0:RETURN 4200 GM= 1:TX= X:TY= Y- 1:RETURN 5000 PLOT 30,16,12,17 5002 FOR Y2= 1TO MY:FOR X2= 1TO MX 5005 IF A(X2,Y2)> 0THEN PLOT 32:GOTO 5010 5007 PLOT 25 5010 NEXT X2:PLOT 13,10 5020 IF MX= 64THEN PLOT 28 5030 NEXT Y2 5040 PLOT 30,18,3,0,0:PRINT " ":PLOT 30,21,3,EX- 1,EY- 1:PRINT " ":PLOT 30,16,29,22 5050 RETURN 10000 REM START GAME 10002 FOR X= 1TO 3000:NEXT X 10015 PLOT 30,16,29,17 10020 PLOT 12:INPUT "DO YOU WANT TO LEAVE FOOTPRINTS? ";F$ 10030 IF LEFT$ (F$,1)= "Y"THEN FP= 1:GOTO 10050 10040 IF LEFT$ (F$,1)< > "N"THEN 10020 10050 PLOT 12 10060 X= 1:Y= 1 10070 IF A(1,2)= 1THEN XD= 0:YD= 1:GOTO 10150 10080 IF A(2,1)= 1THEN XD= 1:YD= 0 10150 REM CONTINUE HERE 10155 OUT 8,255 10157 OUT 8,247 10160 IF XD= 1THEN LX= 0:LY= - 1:RX= 0:RY= 1:DR$= "EAST" 10165 IF XD= - 1THEN LX= 0:LY= 1:RX= 0:RY= - 1:DR$= "WEST" 10170 IF YD= 1THEN LX= 1:LY= 0:RX= - 1:RY= 0:DR$= "SOUTH" 10175 IF YD= - 1THEN LX= - 1:LY= 0:RX= 1:RY= 0:DR$= "NORTH" 10177 PLOT 3,22,31,29,19:PRINT "YOU ARE GOING ";DR$;"" 10178 REM CORRIDOR DISPLAY ROUT. PH IS PHASE, N IS CORRIDOR SEGMENT 10180 FOR PH= 1TO 2 10190 FOR N= 1TO 5 10192 PLOT 22 10195 P1= 2* N- (PH- 1):P2= 2* (N+ 1)- (PH- 1) 10196 P3= 25- P1:P4= 25- P2 10200 XF= XD* (N- 1):YF= YD* (N- 1) 10210 IF A(X+ XF,Y+ YF)= 0THEN 10275 10212 IF FP= 1AND A(X+ XF,Y+ YF)= 1.5THEN GOSUB 16000 10215 IF PH= 5THEN END 10220 IF A(X+ XF+ LX,Y+ YF+ LY)> 0THEN GOSUB 15000:GOTO 10250 10240 GOSUB 15200 10250 IF A(X+ XF+ RX,Y+ YF+ RY)> 0THEN GOSUB 15600:GOTO 10270 10260 GOSUB 15800 10270 IF A(X+ XF,Y+ YF)> 0THEN 10300 10275 IF A(X+ XD* (N- 2),Y+ YD* (N- 2))= 2THEN PLOT 17 10277 P1= P1- 2:P2= P2- 2:P3= P3+ 2:P4= P4+ 2 10280 GOSUB 15400 10290 GOTO 10305 10300 NEXT N 10305 IF PH= 1THEN 12000 10306 FOR TT= 1TO 150 10307 NEXT TT:PLOT 12:NEXT PH:A(X,Y)= 1.5:X= X+ XD:Y= Y+ YD:GOTO 10150 11000 FOR PY= 27TO 31:PLOT 3,0,PY:PLOT 11:NEXT PY:PLOT 3,0,28 11010 PLOT 3,0,28:PRINT "CONGRATULATIONS - YOU HAVE FOUND THE END OF THE MAZE" 11015 OUT 8,255 11020 PRINT :PLOT 29,19:INPUT "ANOTHER GAME? ( Y OR N ) ";NG$ 11030 IF NG$= "Y"THEN RUN 11040 IF NG$< > "N"THEN 11020 11050 END 11990 REM 12000-12900 CHECKS TURNS, ALLOWS PLAYER TO SEE MAP 12000 R$= "":L$= "":F$= "":B$= "" 12007 XF= XD:YF= YD 12008 IF A(X,Y)= 2THEN 11000 12010 IF A(X+ LX,Y+ LY)> 0THEN L$= "LEFT " 12020 IF A(X+ RX,Y+ RY)> 0THEN R$= "RIGHT " 12030 IF A(X+ XF,Y+ YF)> 0THEN F$= "STRAIGHT " 12032 IF A(X- XF,Y- YF)> 0THEN B$= "BACKWARDS " 12035 IF L$= ""AND R$= ""AND F$< > ""THEN 10306 12040 FOR PY= 27TO 31:PLOT 3,0,PY:PLOT 11:NEXT PY:PLOT 3,0,28 12045 OUT 8,255 12047 IF MT< MOTHEN PLOT 3,0,30,19:PRINT "PRESS 'M' FOR MAP" 12050 PLOT 3,0,28,19:PRINT "DO YOU WANT TO GO ";L$;R$;F$;B$;"? "; 12052 POKE 33278,0 12054 IF PEEK (33278)= 0THEN 12054 12055 OUT 8,247:D$= CHR$ (PEEK (33278)) 12056 PRINT :IF D$= "M"THEN 12110 12060 IF D$< > "L"AND D$< > "R"AND D$< > "S"AND D$< > "B"THEN 12040 12062 IF D$= "L"AND L$= ""THEN 12040 12063 IF D$= "R"AND R$= ""THEN 12040 12064 IF D$= "S"AND F$= ""THEN 12040 12065 IF D$= "B"AND B$= ""THEN 12040 12070 IF D$= "B"THEN 12200 12080 IF D$= "L"THEN 12400 12090 IF D$= "R"THEN 12600 12100 GOTO 12800 12110 MT= MT+ 1:IF MT> MOTHEN 12160 12115 GOSUB 5000:OUT 8,255 12120 PLOT 3,20,31:INPUT "PRESS [ENTER] TO CONTINUE";E$ 12130 OUT 8,247 12140 RD= 1 12150 PLOT 12:GOTO 10180 12160 FOR PY= 27TO 31:PLOT 3,0,PY,11:NEXT PY 12170 PLOT 3,0,28,19:PRINT "YOU HAVE USED ALL OF YOUR MAP OBSERVATIONS" 12180 FOR TT= 1TO 500:NEXT TT 12190 GOTO 12040 12200 XD= - XD:YD= - YD 12210 GOSUB 12900:GOTO 10150 12400 XD= LX:YD= LY 12410 GOSUB 12900:GOTO 10150 12600 XD= RX:YD= RY 12610 GOSUB 12900:GOTO 10150 12800 GOTO 10306 12900 FOR EL= 0TO 26:PLOT 3,0,EL:PLOT 11:NEXT EL:RETURN 14990 REM 15000-15800 DISPLAY THE '3-D' CORRIDOR USING THE 14991 REM COORDINATES STORED IN THE CX & CY ARRAYS 15000 PLOT 2,CX(P1),CY(P2),242,CX(P2),CY(P2),CX(P2),CY(P4),CX(P1),CY(P4),255:RETURN 15200 PLOT 2,CX(P1),CY(P1),242,CX(P2),CY(P2),CX(P2),CY(P4),CX(P1),CY(P3),255:RETURN 15400 PLOT 2,CX(P2),CY(P2),242,CX(P4),CY(P2),CX(P4),CY(P4),CX(P2),CY(P4),CX(P2),CY(P2),255:RETURN 15600 PLOT 2,CX(P3),CY(P2),242,CX(P4),CY(P2),CX(P4),CY(P4),CX(P3),CY(P4),255:RETURN 15800 PLOT 2,CX(P3),CY(P1),242,CX(P4),CY(P2),CX(P4),CY(P4),CX(P3),CY(P3),255:RETURN 15990 REM 16000-16060 PRINTS 'FOOTPRINTS' IF NECESSARY 16000 ON NGOTO 16020,16030,16040,16050,16060 16010 PRINT "ERROR-1";N;"":END 16020 PLOT 3,32,25:PRINT "!":RETURN 16030 PLOT 3,32,21:PRINT " !":RETURN 16040 PLOT 3,32,18:PRINT "!":RETURN 16050 PLOT 3,32,16:PRINT " !":RETURN 16060 PLOT 3,32,14:PRINT "!":RETURN 20000 DATA 0,126,0,126,10,118,21,110,30,103,37,97,44,91,49,87,54,83,57,81,61,77,64,75,65,72,68,70 20010 DATA 72,66,75,64,80,60,85,56,92,50,99,44,108,37,117,28,127,20,127,20 30000 PLOT 30,16,12,29,19,14 30010 PLOT 3,17,11:PRINT "COMPUCOLOR PRESENTS LABYRINTH" 30020 PLOT 15,3,0,20,11,3,22,20:INPUT "INSTRUCTIONS? (Y/N) ";I$ 30025 IF I$< > "Y"AND I$< > "N"THEN 30020 30030 IF I$= "Y"THEN PLOT 27:PRINT "DLOA LAINST.DSP":PLOT 27,27,6,3,3,18,30:INPUT "PRESS ENTER TO CONTINUE";E$ 30100 FOR X= 1TO 2000:NEXT X:RETURN