Compucolor.org – Virtual Media

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