100 REM ***************
110 REM * * 120 REM * 3-D Maze * 130 REM * * 140 REM * Written By * 150 REM * Nigel Sharp * 160 REM * * 170 REM * July 1985 * 180 REM * * 190 REM *************** 200 RANDOMIZE TIME:PRINT CHR$(22)CHR$(0)CHR$(23)CHR$(0) 210 GOSUB 260 'Initialisation 220 GOSUB 490 'Instructions 230 GOSUB 810 'Play Game 240 GOSUB 1160 'Hiscores 250 GOTO 230 260 REM Initialisation 270 DIM ma%(35,15,4) 280 MODE 1:INK 0,0:INK 1,26 290 PAPER 0:PEN 1:LOCATE 13,10 300 PRINT "Please Wait ..." 310 FOR level=1 TO 4 320 FOR row=1 TO 15 330 READ maze$ 340 FOR column=1 TO 35 350 IF MID$(maze$,column,1)=" " THEN ma=0 ELSE ma=1 360 ma%(column,row,level)=ma 370 NEXT column,row,level 380 DIM s(15):FOR a=0 TO 15 390 s(a)=0.7^a*200-1:NEXT 400 ORIGIN 200,200 410 DIM view(15,3) 420 DIM hi(15),hi$(15) 430 FOR a=1 TO 15 440 hi(a)=500:hi$(a)="Nobody in particular" 450 NEXT 460 ENT -1,5,-1,1,10,1,1:ENT -2,1,15,1 470 ENV 1,5,-1,1,100,0,100:ENV 2,15,-1,1 480 RETURN 490 REM Instructions 500 MODE 1:INK 0,0:INK 1,26 510 INK 2,12:INK 3,14:BORDER 11 520 PAPER 0:PEN 1:LOCATE 17,2 530 PRINT "3-D Maze":LOCATE 16,3 540 PRINT "==========":LOCATE 10,4 550 PEN 2:PRINT "Written By Nigel Sharp" 560 PEN 3:PRINT 570 PRINT " The object of this laberynth game is" 580 PRINT " to work your way down through the four" 590 PRINT " levels of the maze, to the ground" 600 PRINT " floor, where you must find the target" 610 PRINT " location, marked with a blue cross on" 620 PRINT " the floor. On each level there is a" 630 PRINT " hole which leads to the next level." 640 PRINT " There are several things to help you." 650 PRINT " These are to the right of the 3D view" 660 PRINT " of the maze shown on the left. The one" 670 PRINT " which should prove most useful is the" 680 PRINT " map at the bottom, which is built up" 690 PRINT " as you explore the maze. The hole ( or" 700 PRINT " target, on the last level) is shown as" 710 PRINT " a black dot, and your current position" 720 PRINT " is shown flashing.Use the left & right" 730 PRINT " cursor keys to turn, and the copy key" 740 PRINT " to move forwards." 750 LOCATE 13,25:PAPER 1:PEN 2 760 LOCATE 13,25:PAPER 1:PEN 2 770 PRINT "PRESS ANY KEY"; 780 WHILE INKEY$<>"":WEND 790 IF INKEY$="" THEN 790 800 RETURN 810 REM Play Game 820 moves=0:lev=0 830 REM new level 840 dir=INT(RND(1)*4)+1:lev=lev+1:mx=520:my=48:ORIGIN 520,48 850 FOR a=-32 TO 32 STEP 2:PLOT -72,a,2:DRAWR 144,0,2:NEXT 860 GOSUB 2100 870 x=INT(RND(1)*33)+2 880 y=INT(RND(1)*13)+2 890 otx=x:oty=y 900 IF lev=1 THEN otx=1:oty=1 910 IF ma%(x,y,lev)=1 THEN 870 920 tx=INT(RND(1)*33)+2 930 ty=INT(RND(1)*13)+2 940 IF ma%(tx,ty,lev)=1 THEN 920 950 ORIGIN 520,48:PLOT (tx-x)*2,(ty-y)*2,3 960 GOSUB 2890 970 WHILE INKEY$<>"":WEND 980 PLOT mx,my,2:FOR a=1 TO 25:NEXT:PLOT mx,my,0:a$=INKEY$:FOR a=1 TO 15:NEXT:IF a$="" THEN 980 990 ke=ASC(a$) 1000 IF ke<>242 AND ke<>243 AND ke<>224 THEN 980 1010 IF ke=224 AND view(1,2)=1 THEN 980 1020 SOUND 129,50,0,15,2,2 1030 IF ke=242 THEN dir=dir-1 1040 IF ke=243 THEN dir=dir+1 1050 IF dir=0 THEN dir=4 1060 IF dir=5 THEN dir=1 1070 IF ke<>224 THEN 960 1080 moves=moves+1 1090 IF dir=1 THEN y=y+1:my=my+2 1100 IF dir=2 THEN x=x+1:mx=mx+2 1110 IF dir=3 THEN y=y-1:my=my-2 1120 IF dir=4 THEN x=x-1:mx=mx-2 1130 IF x<>tx OR y<>ty THEN 960 1140 GOSUB 3240:IF lev<4 THEN 830 1150 RETURN 1160 REM Hiscores 1170 IF hi(15)<sc THEN wfc=1:GOTO 1230 1180 hi(15)=moves:hi$(15)="":place=15 1190 FOR a=15 TO 2 STEP -1 1200 IF hi(a-1)>hi(a) THEN hi=hi(a):hi$=hi$(a):hi(a)=hi(a-1):hi$(a)=hi$(a-1):hi(a-1)=hi:hi$(a-1)=hi$:pl=a-1 1210 NEXT:wfc=0 1220 GOSUB 1230:LOCATE 10,pl+8:PAPER 2:PEN 0:INPUT hi$(pl):wfc=1 1230 PAPER 2:MODE 1:CLS 1240 LOCATE 15,2:PEN 3 1250 PRINT "************" 1260 LOCATE 15,3 1270 PRINT "* 3-D Maze *" 1280 LOCATE 15,4 1290 PRINT "************" 1300 LOCATE 17,6:PEN 0 1310 PRINT "HISCORES" 1320 LOCATE 16,7 1330 PRINT "==========" 1340 PEN 3:LOCATE 1,9 1350 FOR a=1 TO 15 1360 IF a<10 THEN PRINT " "; 1370 PRINT a;CHR$(8);") ";hi(a);:IF hi(a)<100 THEN PRINT " "; 1380 PRINT hi$(a) 1390 NEXT a 1400 LOCATE 13,25:PAPER 0:PEN 1 1410 PRINT "Press Any Key"; 1420 IF wfc=0 THEN LOCATE 13,25:PRINT " Enter Name "; 1430 WHILE INKEY$<>"":WEND 1440 IF INKEY$="" AND wfc=1 THEN 1440 1450 RETURN 1460 REM Level 1 1470 DATA XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1480 DATA X X X X 1490 DATA X XXX X X XXXX XXX X X XX X X X X X 1500 DATA X X X X X X X X X X X X X X X 1510 DATA X X X X X X XX XXX X XX X XXX X X X 1520 DATA X X X X X X X X X X X X X X 1530 DATA X X XXX X XXXX XXX XXXX X X X X X X 1540 DATA X X 1550 DATA X X X X X XXXX XXX X X XXX X X XXXX 1560 DATA X XXXXX X X X X X X XXX X 1570 DATA X X X X X XX X X X X X X X XX 1580 DATA X X X X X X X X X X 1590 DATA X XXXXX XXXXXX X XXX X XXX X X XX X 1600 DATA X X 1610 DATA XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1620 REM Level 2 1630 DATA XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1640 DATA X XX X X X XX X 1650 DATA X X X XX XXX X X X XXX XX X X X 1660 DATA X X X X X X X X X X 1670 DATA X X X XX X XX XX X XX X X X 1680 DATA X X X XX XX X X X 1690 DATA X X X X XX X XX X X X X 1700 DATA X X X X X X X X X 1710 DATA X X X X XX X XX X X X X 1720 DATA X X X XX XX X X X 1730 DATA X X X XX X XX XX X XX X X X 1740 DATA X X X X X X X X X X 1750 DATA X X X XX XXX X X X XXX XX X X X 1760 DATA X XX X X X XX X 1770 DATA XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1780 REM Level 3 1790 DATA XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1800 DATA X X X X X X XX 1810 DATA X XXX X XXX X X X XXX X XXXX X X 1820 DATA X X X X X X X X X XX X 1830 DATA X X X X X X X XXX X XX X X 1840 DATA X XXX X X XX X X X X X XX 1850 DATA X X X X X X X X X XX XX X 1860 DATA X X XX XX X XX X X X XX X 1870 DATA X XXX X XX X XX X XX X X XX 1880 DATA X X X X X X XX X XXX X 1890 DATA X XXXX XX X X X X X X X X XX 1900 DATA X X X X X X X X X X X 1910 DATA X XXXX X XXX X X X X X X XX X X 1920 DATA X X X X X X X 1930 DATA XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1940 REM Level 4 1950 DATA XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 1960 DATA X X X X X X X X X 1970 DATA X XX X X X X X X X X XXX X 1980 DATA X X X XX XXXXX XXX X X X X 1990 DATA X XXX X X X X X X X XX X X 2000 DATA X X X X X X XXXX X X X XXX 2010 DATA XXX XXXXXX X X X X X X X X 2020 DATA X X XXXX X X XX X X 2030 DATA X X XXXXXX XXX X X X X 2040 DATA X X X X XX X XXXXXX X XX 2050 DATA X XXX X XXXXX XXXXX X X XX X X 2060 DATA X X XXX X X XX X 2070 DATA X XXXXXXXXX X XX XXXXX XX X X X 2080 DATA X X X X XX 2090 DATA XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 2100 REM Set up screen 2110 REM 2120 MODE 1:BORDER 2 2130 INK 0,0:INK 1,14:INK 2,12:INK 3,3 2140 WINDOW #1,26,40,1,25:WINDOW #2,1,25,1,25 2150 PAPER #1,3:CLS #1 2160 PEN #1,1:LOCATE #1,3,2:PRINT #1,"Moves Taken" 2170 LOCATE #1,4,3:PRINT #1,"So Far:" 2180 LOCATE #1,4,7:PRINT #1,"Moves To" 2190 LOCATE #1,5,8:PRINT #1,"Target:" 2200 LOCATE #1,6,12:PRINT #1,"Level" 2210 LOCATE #1,8,16:PRINT #1,"N" 2220 LOCATE #1,10,18:PRINT #1,"E" 2230 LOCATE #1,8,20:PRINT #1,"S" 2240 LOCATE #1,6,18:PRINT #1,"W" 2250 PAPER #1,2:FOR a=21 TO 24 2260 LOCATE #1,4,a:PRINT #1,SPACE$(9) 2270 NEXT 2280 RETURN 2290 REM Set up view info (North) 2300 en=0 2310 FOR a=0 TO 15 2320 IF en=1 THEN 2420 2330 view(a,1)=ma%(x-1,y+a,lev) 2340 IF tx<>x OR ty<>y+a THEN 2370 2350 IF lev=4 THEN view(a,2)=2 ELSE view(a,2)=3 2360 GOTO 2380 2370 view(a,2)=ma%(x,y+a,lev) 2380 IF x=otx AND oty=y+a AND ma%(otx,oty,lev)<>1 THEN view(a,2)=4 2390 view(a,3)=ma%(x+1,y+a,lev) 2400 en=view(a,2) 2410 NEXT 2420 FOR a=1 TO 2:NEXT 2430 RETURN 2440 REM Set up view info (East) 2450 en=0 2460 FOR a=0 TO 15 2470 IF en=1 THEN 2570 2480 view(a,1)=ma%(x+a,y+1,lev) 2490 IF ty<>y OR tx<>x+a THEN 2520 2500 IF lev=4 THEN view(a,2)=2 ELSE view(a,2)=3 2510 GOTO 2530 2520 view(a,2)=ma%(x+a,y,lev) 2530 IF y=oty AND otx=x+a AND ma%(otx,oty,lev)<>1 THEN view(a,2)=4 2540 view(a,3)=ma%(x+a,y-1,lev) 2550 en=view(a,2) 2560 NEXT 2570 FOR a=1 TO 2:NEXT 2580 RETURN 2590 REM Set up view info (South) 2600 en=0 2610 FOR a=0 TO 15 2620 IF en=1 THEN 2720 2630 view(a,1)=ma%(x+1,y-a,lev) 2640 IF x<>tx OR ty<>y-a THEN 2670 2650 IF lev=4 THEN view(a,2)=2 ELSE view(a,2)=3 2660 GOTO 2680 2670 view(a,2)=ma%(x,y-a,lev) 2680 IF x=otx AND oty=y-a AND ma%(otx,oty,lev)<>1 THEN view(a,2)=4 2690 view(a,3)=ma%(x-1,y-a,lev) 2700 en=view(a,2) 2710 NEXT 2720 FOR a=1 TO 2:NEXT 2730 RETURN 2740 REM Set up view info (West) 2750 en=0 2760 FOR a=0 TO 15 2770 IF en=1 THEN 2870 2780 view(a,1)=ma%(x-a,y-1,lev) 2790 IF y<>ty OR tx<>x-a THEN 2820 2800 IF lev=4 THEN view(a,2)=2 ELSE view(a,2)=3 2810 GOTO 2830 2820 view(a,2)=ma%(x-a,y,lev) 2830 IF y=oty AND otx=x-a AND ma%(otx,oty,lev)<>1 THEN view(a,2)=4 2840 view(a,3)=ma%(x-a,y+1,lev) 2850 en=view(a,2) 2860 NEXT 2870 FOR a=1 TO 2:NEXT 2880 RETURN 2890 REM Draw 3-D view of maze 2900 ON dir GOSUB 2290,2440,2590,2740 2910 CLS #2:ORIGIN 200,200:en=0 2920 FOR d=0 TO 10 2930 IF view(d,2)<>1 THEN 2980 2940 PLOT -s(d),s(d),2:DRAW s(d),s(d),2:PLOT -s(d),-s(d),2:DRAW s(d),-s(d),2 2950 IF view(d-1,1)=1 THEN PLOT -s(d),s(d),2:DRAW -s(d),-s(d),2 2960 IF view(d-1,3)=1 THEN PLOT s(d),s(d),2:DRAW s(d),-s(d),2 2970 en=1 2980 IF en=1 THEN 3080 2990 IF view(d,1)=1 THEN PLOT -s(d),s(d),2:DRAW -s(d+1),s(d+1),2:PLOT -s(d),-s(d),2:DRAW -s(d+1),-s(d+1),2 ELSE PLOT -s(d),s(d+1),2:DRAW -s(d+1),s(d+1),2:PLOT -s(d),-s(d+1),2:DRAW -s(d+1),-s(d+1),2 3000 IF view(d,3)=1 THEN PLOT s(d),s(d),2:DRAW s(d+1),s(d+1),2:PLOT s(d),-s(d),2:DRAW s(d+1),-s(d+1),2 ELSE PLOT s(d),s(d+1),2:DRAW s(d+1),s(d+1),2:PLOT s(d),-s(d+1),2:DRAW s(d+1),-s(d+1),2 3010 IF (view(d,1)<>view(d+1,1)) AND view(d+1,2)<>1 THEN PLOT -s(d+1),s(d+1),2:DRAW -s(d+1),-s(d+1),2 3020 IF (view(d,3)<>view(d+1,3)) AND view(d+1,2)<>1 THEN PLOT s(d+1),s(d+1),2:DRAW s(d+1),-s(d+1),2 3030 IF view(d,2)=2 THEN PLOT -s(d),-s(d),1:DRAW s(d+1),-s(d+1),1:PLOT s(d),-s(d),1:DRAW -s(d+1),-s(d+1),1 3040 IF view(d,2)=3 THEN PLOT -s(d+1),-s(d+1),2:DRAW -s(d+1),-s(d),2:PLOT s(d+1),-s(d+1),2:DRAW s(d+1),-s(d),2:PLOT -s(d),-s(d),2:DRAW s(d),-s(d),2:DRAW s(d+1),-s(d+1),2:DRAW -s(d+1),-s(d+1),2:DRAW -s(d),-s(d),2 3050 IF view(d,2)=4 THEN PLOT -s(d+1),s(d+1),2:DRAW -s(d+1),s(d),2:PLOT s(d+1),s(d+1),2:DRAW s(d+1),s(d),2:PLOT -s(d),s(d),2:DRAW s(d),s(d),2:DRAW s(d+1),s(d+1),2:DRAW -s(d+1),s(d+1),2:DRAW -s(d),s(d),2 3060 en=view(d,2) 3070 NEXT 3080 FOR a=1 TO 2:NEXT 3090 PEN #1,2:PAPER #1,3:LOCATE #1,6,5 3100 PRINT #1,moves:LOCATE #1,6,10 3110 dtt=INT(SQR(ABS(tx-x)^2+ABS(ty-y)^2)) 3120 PRINT #1,dtt:LOCATE #1,7,14 3130 PRINT #1,lev 3140 LOCATE #1,8,17:PRINT #1," " 3150 LOCATE #1,9,18:PRINT #1," " 3160 LOCATE #1,8,19:PRINT #1," " 3170 LOCATE #1,7,18:PRINT #1," " 3180 IF DIr=1 THEN LOCATE #1,8,17:PRINT #1,CHR$(240) 3190 IF DIr=2 THEN LOCATE #1,9,18:PRINT #1,CHR$(243) 3200 IF dir=3 THEN LOCATE #1,8,19:PRINT #1,CHR$(241) 3210 IF dir=4 THEN LOCATE #1,7,18:PRINT #1,CHR$(242) 3220 ORIGIN 0,0:PLOT mx,my,0 3230 RETURN 3240 REM Sound for reaching next level 3250 GOSUB 2890:IF lev=4 THEN 3310 3260 SOUND 129,50,200,15,0,1 3270 FOR a=31 TO 1 STEP -1 3280 SOUND 1,0,2,a/4,0,0,a 3290 NEXT 3300 RETURN 3310 REM Music for when final target reached 3320 RESTORE 3370 3330 FOR a=1 TO 12 3340 READ no,le 3350 SOUND 1,no,le*10,15,1 3360 NEXT 3370 DATA 119,2,119,1,119,1,119,2 3380 DATA 95,2,95,1,95,1,95,2 3390 DATA 80,2,80,2,80,2 3400 DATA 60,6 3410 RETURN |