10 DEF INT A-Z 20 T$=LEFT$(TIME$,2)+MID$(TIME$,4,2)+RIGHT$(TIME$,2) 30 FOR I=-902 TO -896 40 POKE I,VAL(MID$(T$,I+903,1)) 50 NEXT 60 GOSUB 3000 70 HE=8:CX=0:CY=MY:Q=0:FL=0 80 CLS:GOSUB 1000:GOSUB 5000 200 A$=INKEY$:IF A$="" THEN 200 210 A=ASC(A$) 220 IF A=1 OR A=2 OR A=6 OR A=20 OR (A>=28 AND A<=31) THEN 230 ELSE 200 230 IF A=1 THEN FL=1:A=29 240 IF A=6 THEN FL=1:A=28 250 IF A=20 THEN FL=1:A=30 260 IF A=2 THEN FL=1:A=31 270 IF A=28 THEN D=HE*8MOD15 280 IF A=29 THEN D=HE*2MOD15 290 IF A=30 THEN D=HE*1MOD15 300 IF A=31 THEN D=HE*4MOD15 400 IF FL THEN HE=D:GOTO 700 410 IF M(CX,CY) AND D THEN BEEP:GOTO200 420 IF D=1 THEN X=0:Y=-1 430 IF D=2 THEN X=-1:Y=0 440 IF D=4 THEN X=0:Y=+1 450 IF D=8 THEN X=+1:Y=0 460 GOSUB 5500 470 HE=D 480 IF INT(M(CX,CY)/16)=HE*4MOD15 THEN ML=ML-1:M(CX,CY)=M(CX,CY)AND15 500 CX=CX+X:CY=CY+Y 510 Q=Q+1 520 IF CX<0 OR CX>MX OR CY<0 OR CY>MY THEN 700 530 IF (M(CX,CY)AND240)=0 THEN M(CX,CY)=M(CX,CY)OR(HE*16):ML=ML+1 700 GOSUB 1000 710 GOSUB 5000 720 FL=0 730 GOTO 200 1000 FOR I=0 TO 7 1010 PRINT@I*40,SPACE$(22); 1020 NEXT 1030 LINE(0,0)-(127,63),1,B 1100 ZD=0:GOSUB 2000 1110 ZL=HE*2MOD15 1120 ZF=HE 1130 ZR=HE*8MOD15 1140 IF RM AND ZL THEN LINE(0,0)-(15,7):LINE-(15,55):LINE-(0,63) ELSE LINE(0,7)-(15,7):LINE-(15,55):LINE-(0,55) 1150 IF RM AND ZR THEN LINE(127,0)-(111,7):LINE-(111,55):LINE-(127,63) ELSE LINE(127,7)-(111,7):LINE-(111,55):LINE-(127,55) 1160 IF RM AND ZF THEN LINE(15,7)-(111,55),1,B:RETURN 1200 ZD=1:GOSUB 2000 1210 ZL=HE*2MOD15 1220 ZF=HE 1230 ZR=HE*8MOD15 1240 IF RM AND ZL THEN LINE(15,7)-(31,15):LINE-(31,47):LINE-(15,55) ELSE LINE(15,15)-(31,15):LINE-(31,47):LINE-(15,47) 1250 IF RM AND ZR THEN LINE(111,7)-(95,15):LINE-(95,47):LINE-(111,55) ELSE LINE(111,15)-(95,15):LINE-(95,47):LINE-(111,47) 1260 IF RM AND ZF THEN LINE(31,15)-(95,47),1,B:RETURN 1300 ZD=2:GOSUB 2000 1310 ZL=HE*2MOD15 1320 ZF=HE 1330 ZR=HE*8MOD15 1340 IF RM AND ZL THEN LINE(31,15)-(39,19):LINE-(39,43):LINE-(31,47) ELSE LINE(31,19)-(39,19):LINE-(39,43):LINE-(31,43) 1350 IF RM AND ZR THEN LINE(95,15)-(87,19):LINE-(87,43):LINE-(95,47) ELSE LINE(95,19)-(87,19):LINE-(87,43):LINE-(95,43) 1360 IF RM AND ZF THEN LINE(39,19)-(87,43),1,B:RETURN 1400 ZD=3:GOSUB 2000 1410 ZL=HE*2MOD15 1420 ZF=HE 1430 ZR=HE*8MOD15 1440 IF RM AND ZL THEN LINE(39,19)-(47,23):LINE-(47,39):LINE-(39,43) ELSE LINE(39,23)-(47,23):LINE-(47,39):LINE-(39,39) 1450 IF RM AND ZR THEN LINE(87,19)-(79,23):LINE-(79,39):LINE-(87,43) ELSE LINE(87,23)-(79,23):LINE-(79,39):LINE-(87,39) 1460 IF RM AND ZF THEN LINE(47,23)-(79,39),1,B:RETURN 1500 ZD=4:GOSUB 2000 1510 ZL=HE*2MOD15 1520 ZF=HE 1530 ZR=HE*8MOD15 1540 IF RM AND ZL THEN LINE(47,23)-(55,27):LINE-(55,35):LINE-(47,39) ELSE LINE(47,27)-(55,27):LINE-(55,35):LINE-(47,35) 1550 IF RM AND ZR THEN LINE(79,23)-(71,27):LINE-(71,35):LINE-(79,39) ELSE LINE(79,27)-(71,27):LINE-(71,35):LINE-(79,35) 1560 IF RM AND ZF THEN LINE(55,27)-(71,35),1,B:RETURN 1600 ZD=5:GOSUB 2000 1610 LINE(55,27)-(71,35) 1620 LINE(55,35)-(71,27) 1630 RETURN 2000 IF HE=1 THEN X=0:Y=-ZD 2010 IF HE=2 THEN X=-ZD:Y=0 2020 IF HE=4 THEN X=0:Y=+ZD 2030 IF HE=8 THEN X=+ZD:Y=0 2040 IF CX+X<0 OR CX+X>MX OR CY+Y<0 OR CY+Y>MY THEN 2100 2050 RM=M(CX+X,CY+Y)AND15 2060 RETURN 2100 RM=15 2200 IF ZD=0 THEN GOTO 9000 2210 IF ZD=1 THEN LINE(15,7)-(111,55),1,BF:RETURN 2220 IF ZD=2 THEN LINE(31,15)-(95,47),1,BF:RETURN 2230 IF ZD=3 THEN LINE(39,19)-(87,43),1,BF:RETURN 2240 IF ZD=4 THEN LINE(47,23)-(79,39),1,BF:RETURN 2250 IF ZD=5 THEN LINE(55,27)-(71,35),1,BF:RETURN 3000 CLS 3010 GOSUB 8000 3020 CLS 3030 PRINT@40,"Size of maze: X";:INPUT MX 3040 MX=INT(MX-1) 3050 PRINT@60,"Y";:INPUT MY 3060 MY=INT(MY-1) 3070 IF MY>14 OR MX>25 THEN PRINT"Max. X is 26, Max. Y is 15":GOTO 3030 3080 IF MX<1 OR MY<1 THEN PRINT"Size must greater than one":GOTO 3030 3100 DIM M(MX,MY) 3110 FOR Y=0 TO MY 3120 FOR X=0 TO MX 3130 M(X,Y)=15 3140 NEXT 3150 NEXT 3160 CX=0 3170 CY=MY 3180 CLS 3190 PRINT@54,"Building Maze" 3200 ML=0 3300 DIM D(4) 3310 N=(MX+1)*(MY+1) 3320 N9=1 3400 D=0 3410 PRINT@99,N-N9; 3420 IF CY>0 THEN IF M(CX,CY-1)=15 THEN D=D+1:D(D)=1 3430 IF CX>0 THEN IF M(CX-1,CY)=15 THEN D=D+1:D(D)=2 3440 IF CYMX THEN CY=DR-MX-1:M(MX,CY)=M(MX,CY)-8 ELSE CX=DR:M(CX,0)=M(CX,0)-1 3720 RETURN 4000 CX=CX+1 4010 IF CX>MX THEN CX=0:CY=CY+1 4020 IF CY>MY THEN CY=0 4030 IF M(CX,CY)=15 THEN 4000 ELSE RETURN 5000 Y1=CY:Y2=CY 5010 X1=CX:X2=CX 5020 IF ZD=5 THEN ZD=4 5030 IF HE=1 THEN Y1=Y1-ZD:IF Y1<0 THEN Y1=0 5040 IF HE=2 THEN X1=X1-ZD:IF X1<0 THEN X1=0 5050 IF HE=4 THEN Y2=Y2+ZD:IF Y2>MY THEN Y2=MY 5060 IF HE=8 THEN X2=X2+ZD:IF X2>MX THEN X2=MX 5100 FOR UY=Y1 TO Y2 5110 VY=3+UY*4 5120 FOR UX=X1 TO X2 5130 VX=132+UX*4 5140 FOR I=0 TO 3 5150 VD=2^I 5160 IF VD AND M(UX,UY) THEN PRINT""; ELSE GOTO 5210 5170 IF I=0 THEN LINE(VX,VY)-(VX+4,VY) 5180 IF I=1 THEN LINE(VX,VY)-(VX,VY+4) 5190 IF I=2 THEN LINE(VX,VY+4)-(VX+4,VY+4) 5200 IF I=3 THEN LINE(VX+4,VY)-(VX+4,VY+4) 5210 NEXT 5220 NEXT 5230 NEXT 5400 VX=132+CX*4:VY=3+CY*4 5410 LINE(VX+1,VY+1)-(VX+3,VY+3),0,B 5420 IF HE=1 THEN LINE(VX+1,VY+3)-(VX+3,VY+3):LINE(VX+2,VY+1)-(VX+2,VY+3) 5430 IF HE=2 THEN LINE(VX+3,VY+1)-(VX+3,VY+3):LINE(VX+1,VY+2)-(VX+3,VY+2) 5440 IF HE=4 THEN LINE(VX+1,VY+1)-(VX+3,VY+1):LINE(VX+2,VY+1)-(VX+2,VY+3) 5450 IF HE=8 THEN LINE(VX+1,VY+1)-(VX+1,VY+3):LINE(VX+1,VY+2)-(VX+3,VY+2) 5460 RETURN 5500 VX=132+CX*4:VY=3+CY*4 5510 LINE(VX+1,VY+1)-(VX+3,VY+3),0,B 5520 RETURN 8000 INPUT "Would you like instructions";A$ 8010 IF LEFT$(A$,1)<>"Y" AND LEFT$(A$,1)<>"y" THEN RETURN 8020 CLS 8030 PRINT@18,"a";CHR$(27);"pMAZE";CHR$(27);"q" 8040 PRINT@48,"by Jim Straus 70116,667" 8050 PRINT 8060 PRINT"The object of the game is to find your" 8070 PRINT"way out of a maze. The left side of the" 8080 PRINT"screen is your view inside the maze." 8090 PRINT"The right side is where you have been." 8100 PRINT@288,CHR$(27);"pPress any key to continue";CHR$(27);"q"; 8110 IF INKEY$="" THEN 8110 8200 CLS 8210 PRINT"The maze can be anywhere between 2 by 2" 8220 PRINT"and 26 by 15 units in size." 8230 PRINT 8240 PRINT"Use the arrow keys to move, and the" 8250 PRINT"shift + arrow keys to turn in place." 8260 PRINT 8270 PRINTSPACE$(16);"Good Luck!" 8300 PRINT@288,CHR$(27);"pPress any key to continue";CHR$(27);"q"; 8310 IF INKEY$="" THEN 8310 8500 RETURN 9000 FOR I=0 TO 7 9010 PRINT@I*40,SPACE$(22); 9020 NEXT 9030 ML=ML+1 9040 IF ML=Q THEN PRINT@05,"You Win!!!" ELSE PRINT@0,"You Had";Q-ML;"Extra Moves" 9050 PRINT@80,"Best Run is";ML;"Moves" 9060 PRINT@160,"Your Score is";INT((ML-INT((Q-ML)/2))/ML*100) 9070 Y1=0:Y2=MY 9080 X1=0:X2=MX 9090 GOSUB 5100 9900 PRINT@240,"Again"; 9910 INPUT A$ 9920 IF LEFT$(A$,1)="N" OR LEFT$(A$,1)="n" THEN MENU ELSE RUN