0 REM SAVE"D:MAZE.BAS"›1 REM BY DAVID A PATERSON›2 REM OCT 3 93›3 REM VER 1.0›4 REM PUBLIC DOMAIN›5 REM EMAIL: GEnie D.PATERSON2›6 REM Internet D.PATERSON2@genie.geis.com›10 GRAPHICS 0:POKE 752,1:POKE 82,0:POKE 710,2:? :? :? "3d Maze":? :? "Use cursor keys:  forward,  to turn":? ›20 ? :? "Feel free to distribute / change program or write your own"›25 ? "Screen will blank during updates for":? "speed."›27 ? :? :? " - David A. Paterson, Oct 3 93":? :? "ÐÒÅÓÓ ÁÎÙ ËÅÙ"›29 OPEN #1,4,0,"K:":GET #1,A:CLOSE #1›30 DIM MAZE$(400),RD$(20):MAZE$=" ":MAZE$(400)=MAZE$:MAZE$(2)=MAZE$›40 FOR I=0 TO 19:READ RD$:MAZE$(I*20+1,I*20+20)=RD$:NEXT I›50 YRX=19:YRY=18›60 YPOS=YRX+20*YRY:IF MAZE$(YPOS,YPOS)<>" " THEN 50›70 FACING=1›99 REM BEGIN DISPLAY ROUTINE›100 ? "}":PPP=PEEK(559):POKE 559,0›110 IF FACING=1 THEN FRONT=-20:SIDE=1›120 IF FACING=2 THEN FRONT=1:SIDE=20›130 IF FACING=3 THEN FRONT=20:SIDE=-1›140 IF FACING=4 THEN FRONT=-1:SIDE=-20›145 POSITION 0,0:? CHR$(ASC("N")*(FACING=1)+ASC("E")*(FACING=2)+ASC("S")*(FACING=3)+ASC("W")*(FACING=4));›150 FOR I=3 TO 1 STEP -1›160 FOR L=-I TO 0›170 T=L:GOSUB 240›180 T=-L:GOSUB 240›190 NEXT L›200 NEXT I›210 OFFSET=SIDE:I=4:GOSUB 250›220 OFFSET=-SIDE:GOSUB 250›230 GOTO 1000›240 OFFSET=I*FRONT+T*SIDE:WALL=0›250 SLOC=YPOS+OFFSET:IF SLOC<1 OR SLOC>LEN(MAZE$) THEN WALL=1:GOTO 275›260 WALL=(MAZE$(SLOC,SLOC)=" ")›270 IF NOT WALL THEN 280:REM GO ON; DON'T DRAW ANYTHING›275 ON I GOSUB 300,400,500,700›280 RETURN ›300 X=15+T*8›301 POSITION X,2:? " ";›302 POSITION X,3:? " ";›303 POSITION X,4:? " ";›304 POSITION X,5:? " ";›305 POSITION X,6:? " ";›306 POSITION X,7:? " ";›307 POSITION X,8:? " ";›308 POSITION X,9:? " ";›309 POSITION X,1:? "";›310 POSITION X,10:? " ";›315 IF NOT T THEN RETURN ›320 IF T=ABS(T) THEN 340›321 X=X+8›322 POSITION X,2:? " ";›323 POSITION X,3:? "  ";›324 POSITION X,4:? " ‚";›325 POSITION X,5:? " ‚";›326 POSITION X,6:? " ‚";›327 POSITION X,7:? " ‚";›328 POSITION X,8:? " ˆ";›329 POSITION X,9:? "ˆ ";›330 RETURN ›340 X=X-2›342 POSITION X,2:? " ";›343 POSITION X,3:? " ";›344 POSITION X,4:? "– ";›345 POSITION X,5:? "– ";›346 POSITION X,6:? "– ";›347 POSITION X,7:? "– ";›348 POSITION X,8:? "Š ";›349 POSITION X,9:? " Š";›350 RETURN ›400 X=17+T*4›402 POSITION X,3:? "";›404 POSITION X,4:? " ";›406 POSITION X,5:? " ";›408 POSITION X,6:? " ";›410 POSITION X,7:? " ";›412 POSITION X,8:? " ";›415 IF NOT T THEN RETURN ›420 IF T=ABS(T) THEN 440›422 X=X+4›424 POSITION X,4:? " ";›426 POSITION X,5:? "‚";›428 POSITION X,6:? "‚";›430 POSITION X,7:? "ˆ";›435 RETURN ›440 X=X-1›442 POSITION X,4:? "";›444 POSITION X,5:? "–";›446 POSITION X,6:? "–";›448 POSITION X,7:? "Š";›450 RETURN ›500 X=18+T*2›510 POSITION X,4:? "";›520 POSITION X,5:? "";›530 POSITION X,6:? "";›540 POSITION X,7:? " ";›550 IF NOT T THEN RETURN ›560 IF T=ABS(T) THEN 610›570 X=X+2›580 POSITION X,5:? " ";›590 POSITION X,6:? "ˆ";›600 RETURN ›610 X=X-1›620 POSITION X,5:? "";›630 POSITION X,6:? "Š";›640 RETURN ›700 IF OFFSET=SIDE THEN 780›705 X=14›715 POSITION X,1:? " ";›720 POSITION X,2:? " ";›725 POSITION X,3:? " ";›730 POSITION X,4:? " ";›735 POSITION X,5:? " ";›740 POSITION X,6:? " ";›745 POSITION X,7:? " ";›750 POSITION X,8:? " ";›755 POSITION X,9:? " ";›760 POSITION X,10:? "ˆ";›770 RETURN ›780 X=23›810 POSITION X,1:? "";›820 POSITION X,2:? " ";›825 POSITION X,3:? " ";›830 POSITION X,4:? " ";›835 POSITION X,5:? " ";›840 POSITION X,6:? " ";›845 POSITION X,7:? " ";›850 POSITION X,8:? " ";›855 POSITION X,9:? " ";›865 POSITION X,10:? "Š";›870 RETURN ›1000 FOR I=0 TO 11:POSITION 2,I:? " ‚";:POSITION 24,I:? "– ";:NEXT I›1010 POSITION 13,12:? "‹Œ"›1020 POKE 559,PPP›2000 OPEN #1,4,0,"K:":GET #1,A:CLOSE #1›2010 IF A=ASC("+") THEN A=0:FACING=FACING-1:IF FACING<1 THEN FACING=4›2020 IF A=ASC("*") THEN A=0:FACING=FACING+1:IF FACING>4 THEN FACING=1›2030 IF A=ASC("-") THEN A=0:GOSUB 3000›2040 IF NOT A THEN 100›2050 GOTO 2000›2999 REM CHECK FORWARD MOVE; IF OK THEN DO IT›3000 SLOC=YPOS+FRONT:IF SLOC<1 OR SLOC>LEN(MAZE$) THEN A=1:POSITION 1,1:? "ý";:RETURN ›3010 IF MAZE$(SLOC,SLOC)=" " THEN POSITION 1,1:? "ý";:A=1:RETURN ›3020 YPOS=SLOC:RETURN ›11000 DATA                     ›11010 DATA            ›11020 DATA                 ›11030 DATA                 ›11040 DATA              ›11050 DATA                ›11060 DATA                 ›11070 DATA                    ›11080 DATA    ›11090 DATA                     ›11100 DATA             ›11110 DATA                    ›11120 DATA               ›11130 DATA                     ›11140 DATA        ›11150 DATA                    ›11160 DATA                 ›11170 DATA                     ›11180 DATA    ›11190 DATA                     ›