10 SCREEN,0:CLS:CLEAR100:DEFINTA-Z:E=15:K=111:FORI=1TOVAL(RIGHT$(TIME$,2)):D=RND(1):NEXT 20 ONERRORGOTO730:GOSUB320 30 HE=8:CX=0:CY=MY:Q=0:CLS:GOSUB180:GOSUB530 40 A$=INKEY$:IFA$=CHR$(27)THEN740ELSEIFA$=""THEN40 50 A=ASC(A$):IFA<3ORA=6ORA=20OR(A>27ANDA<32)THEN60ELSE40 60 IFA<21THENFL=1 70 IFA=28ORA=6THEND=HE*8MODE 80 IFA=29ORA=1THEND=HE*2MODE 90 IFA=30ORA=20THEND=HE*1MODE 100 IFA=31ORA=2THEND=HE*4MODE 110 IFFLTHENHE=D:GOTO170 120 IFM(CX,CY)ANDDTHENBEEP:GOTO40 130 X=(D=2)-(D=8):Y=(D=1)-(D=4):GOSUB650:HE=D 140 IFINT(M(CX,CY)/16)=HE*4MODETHENML=ML-1:M(CX,CY)=M(CX,CY)ANDE 150 CX=CX+X:CY=CY+Y:Q=Q+1:IFCX<0 OR CX>MX OR CY<0 OR CY>MYTHEN170 160 IF(M(CX,CY)AND240)=0THENM(CX,CY)=M(CX,CY)OR(HE*16):ML=ML+1 170 GOSUB180:GOSUB530:FL=0:GOTO40 180 FORI=0TO7:LOCATE0,I:PRINTSPACE$(22);:NEXT 190 LINE(0,0)-(127,63),1,B:RESTORE 200 FORZD=0TO4:READH,J,L,M,R,P,V,B:GOSUB230:IFZTHENRETURN 210 :NEXT 220 ZD=5:GOSUB230:LINE(55,27)-(71,35):LINE(55,35)-(71,27):RETURN 230 X=CX+ZD*((HE=2)-(HE=8)):Y=CY+ZD*((HE=1)-(HE=4)):IFX<0 OR X>MX OR Y<0 OR Y>MYTHEN290 240 RM=M(X,Y)ANDE:ZL=HE*2MODE:ZF=HE:ZR=HE*8MODE:IFZD=5THENRETURN 250 F=H:G=J:IFRMANDZLTHENF=L:G=M 260 LINE(R,F)-(P,H):LINE-(P,J):LINE-(R,G):F=H:G=J:IFRMANDZRTHENF=L:G=M 270 LINE(V,F)-(B,H):LINE-(B,J):LINE-(V,G):Z=0:IFRMANDZFTHENLINE(P,H)-(B,J),1,B:Z=1 280 RETURN 290 RM=E:IFZD=0THEN660 300 Z=1:IFZD=1THENLINE(E,7)-(K,55),1,BF:RETURN 310 C=4*ZD:LINE(E+C+C,7+C)-(K-C-C,55-C),1,BF:RETURN 320 LOCATE 2,1:PRINT"MAZE":LOCATE2,3:PRINT"Maze may be sized from 2X2 to 26X15. 330 LOCATE2,5:PRINT"Size of maze:X";:INPUTMX:MX=INT(MX-1):LOCATE22,5:PRINT"Y";:INPUTMY:MY=INT(MY-1) 340 IFMY>14ORMX>25THENLOCATE2,5:PRINT"Max. X is 26, Max. Y is 15.":GOTO355 350 IFMX<1ORMY<1THENLOCATE2,5:PRINT"Both X and Y must be greater than 1."ELSEGOTO360 355 FORI=0TO2000:NEXTI:LOCATE2,5:PRINTSPACE$(36):GOTO330 360 DIMM(MX,MY):FORY=0TOMY:FORX=0TOMX:M(X,Y)=E:NEXT:NEXT 370 CX=0:CY=MY:CLS:LOCATE2,1:PRINT"Building Maze":ML=0:DIMD(4):N=(MX+1)*(MY+1):N9=1 380 D=0 390 LOCATE1,3:PRINTN-N9; 400 IFCY>0THENIFM(CX,CY-1)=ETHEND=D+1:D(D)=1 410 IFCX>0THENIFM(CX-1,CY)=ETHEND=D+1:D(D)=2 420 IFCYMXTHENCY=DR-MX-1:M(MX,CY)=M(MX,CY)-8ELSECX=DR:M(CX,0)=M(CX,0)-1 490 RETURN 500 CX=CX+1:IFCX>MXTHENCX=0:CY=CY+1 510 IFCY>MYTHENCY=0 520 IFM(CX,CY)=ETHEN500ELSERETURN 530 Y1=CY:Y2=CY:X1=CX:X2=CX:IFZD=5THENZD=4 540 IFHE=1THENY1=Y1-ZD:IFY1<0THENY1=0 550 IFHE=2THENX1=X1-ZD:IFX1<0THENX1=0 560 IFHE=4THENY2=Y2+ZD:IFY2>MYTHENY2=MY 570 IFHE=8THENX2=X2+ZD:IFX2>MXTHENX2=MX 580 FORUY=Y1TOY2:VY=3+UY*4:FORUX=X1TOX2 590 VX=132+UX*4:FORI=0TO3:VD=2^I:IFVDANDM(UX,UY)THENPRINT"";ELSEGOTO610 600 LINE(VX-(I=3)*4,VY-(I=2)*4)-(VX-(I<>1)*4,VY-(I<>0)*4) 610 NEXT:NEXT:NEXT 620 VX=132+CX*4:VY=3+CY*4:LINE(VX+1,VY+1)-(VX+3,VY+3),0,B 630 C=(HE=1)OR(HE=4):LINE(VX+1-2*(HE=2),VY+1-2*(HE=1))-(VX+3+2*(HE=8),VY+3+2*(HE=4)):LINE(VX+1-C,VY+2+C)-(VX+3+C,VY+2-C) 640 RETURN 650 VX=132+CX*4:VY=3+CY*4:LINE(VX+1,VY+1)-(VX+3,VY+3),0,B:RETURN 660 FORI=0TO7:LOCATE0,I:PRINTSPACE$(22);:NEXT 670 ML=ML+1:LOCATE0,0:IFML=QTHENPRINT"YOU WIN!!!"ELSEPRINT"You Had";Q-ML;"Extra Moves 680 LOCATE0,2:PRINT"Best Run is";ML;"Moves":LOCATE0,4:PRINT"Your Score is";INT(((ML-INT((Q-ML))/2))/ML*100):Y1=0:Y2=MY:X1=0:X2=MX 690 GOSUB580 700 LOCATE0,6:PRINT"Play again? ";:A$=INPUT$(1):IFA$="N"ORA$="n"THEN740ELSERUN 710 DATA7,55,0,63,0,15,127,111,15,47,7,55,15,31,111,95,19,43,15,47,31,39,95,87,23,39 720 DATA19,43,39,47,87,79,27,35,23,39,47,55,79,71 730 IFERR=5THENCLS:BEEP:LOCATE10,3:PRINT"LINE must be enabled." 740 CLEAR256,-3200:MENU