1 TEXT: HOME 2 PRINT "WELCOME TO THE DRAGON'S MAZE" 3 PRINT "YOU MAY WATCH WHILE I BUILD A MAZE," 4 PRINT "BUT WHEN IT'S COMPLETE, I'LL ERASE" 5 PRINT "THE PICTURE. THEN YOU'LL ONLY SEE THE WALLS AS YOU BUMP INTO THEM." 6 PRINT "TO MOVE, YOU HIT 'R' FOR RIGHT," 7 PRINT "'L' FOR LEFT, 'U' FOR UP, AND" 8 PRINT "'D' FOR DOWN. DO NOT HIT RETURN!" 9 PRINT 10 PRINT "THE OBJECT IS FOR YOU (THE GREEN DOT" 11 PRINT "TO GET TO THE DOOR ON THE RIGHT SIDE" 12 PRINT "BEFORE THE DRAGON (THE RED DOT) EATS" 13 PRINT "YOU." 14 PRINT "BEWARE!!!!!!!!! SOMETIMES THE DRAGON" 15 PRINT "GETS REAL MAD, AND CLIMBS OVER A WALL." 16 PRINT "BUT MOST OF THE TIME, HE CAN'T GO OVER" 17 PRINT "AND HAS TO GO AROUND." 18 PRINT 19 PRINT "(HINT: YOU CAN OFTEN TELL WHERE A WALL" 20 PRINT "IS, EVEN BEFORE YOU CAN SEE IT, BY" 21 PRINT "THE FACT THAT THE DRAGON CAN'T GET" 22 PRINT "THROUGH IT!)" 23 PRINT 99 DIM A$(3), M(169), T(169) 100 PRINT "ENTER GAME # TO BEGIN ";: INPUT A: IF A<=0 THEN 100 110 A=RND(-ABS(A)): BL=0: WH=15: RD=1: GN=12 120 GR: COLOR=WH 130 HOME: VTAB (21): PRINT "DRAGON MAZE" TAB(25) "GARY J. SHANNON": PRINT TAB(4) "(Applesoft port) RUSSELL A. HOKANSON" 140 FOR I=0 TO 39 STEP 3: VLIN 0,39 AT I: HLIN 0,39 AT I: NEXT I 150 COLOR=BL 160 S=1000 1000 REM INITIALIZE ARRAYS, STARTING POINT AND PROCESSED COUNT 1000 FOR I=1 TO 169: T(I)=0: M(I)=11: NEXT I 1010 X=INT(RND(1)*13)+1: Y=INT(RND(1)*13)+1: C=169 1035 IF C=1 THEN 1200 1040 R=0: D=0: L=0: U=0: K=X+13*(Y-1): M(K)=-ABS(M(K)): C=C-1 1050 IF X=13 THEN 1060 1051 R=M(K+1)>0 1060 IF Y=13 THEN 1070 1061 D=M(K+13)>0 1070 IF X=1 THEN 1080 1071 L=M(K-1)>0 1080 IF Y=1 THEN 1090 1081 U=M(K-13)>0 1090 Q=R+D+L+U 1100 IF (Q<3 AND INT(RND(1)*10)<2) OR Q=0 THEN 1170 1110 DR=INT(RND(1)*4): REM CHOOSE A DIRECTION (0-RIGHT, 1-DOWN, 2-LEFT, 3-UP) 1121 IF DR=1 THEN 1140 1122 IF DR=2 THEN 1150 1123 IF DR=3 THEN 1160 1130 IF NOT R THEN 1110: REM R-RIGHT 1131 M(K)=M(K)+1: X=X+1 1135 VLIN 3*Y-2,3*Y-1 AT 3*(X-1) 1136 GOTO 1035 1140 IF NOT D THEN 1110: REM D-DOWN 1141 M(K)=M(K)+10: Y=Y+1 1145 HLIN 3*X-2,3*X-1 AT 3*(Y-1) 1146 GOTO 1035 1150 IF NOT L THEN 1110: REM L-LEFT 1151 M(K-1)=M(K-1)-1: X=X-1 1155 VLIN 3*Y-2,3*Y-1 AT 3*X 1156 GOTO 1035 1160 IF NOT U THEN 1110: REM U-UP 1161 M(K-13)=M(K-13)-10: Y=Y-1 1165 HLIN 3*X-2,3*X-1 AT 3*Y: GOTO 1035 1170 X=INT(RND(1)*13)+1: Y=INT(RND(1)*13)+1: REM SELECT RANDOM POSITION 1180 IF M(X+13*(Y-1))>0 THEN 1170 1190 C=C+1: GOTO 1035 1200 GOSUB 5000: PRINT "THE MAZE IS READY" 1205 GR: COLOR=WH 1210 VLIN 0,39 AT 0: VLIN 0,39 AT 39: HLIN 0,39 AT 0: HLIN 0,39 AT 39 1220 X=1: Y=INT(RND(1)*13)+1: HX=3*X-2: HY=3*Y-2: FOR K=0 TO 1: FOR L=0 TO 1: COLOR=GN: PLOT HX+K,HY+L: NEXT L,K 1230 WY=INT(RND(1)*13)+1 1240 COLOR=BL: VLIN 3*WY-2,3*WY-1 AT 39 1250 SX=13: SY=WY 1260 QX=3*SX-2: QY=3*SY-2 1500 K= PEEK(-16384): IF K<128 THEN 1500 1510 POKE -16368,0 1515 QQ=K: GOSUB 7000: K=QQ 1516 IF SX=X AND SY=Y THEN 8000 1520 IF K=ASC("R") THEN 2000 1521 IF K=210 THEN 2000 1522 IF K=242 THEN 2000 1530 IF K=ASC("L") THEN 2500 1531 IF K=204 THEN 2500 1532 IF K=236 THEN 2500 1540 IF K=ASC("U") THEN 3000 1541 IF K=213 THEN 3000 1542 IF K=245 THEN 3000 1550 IF K=ASC("D") THEN 3500 1551 IF K=196 THEN 3500 1552 IF K=228 THEN 3500 1560 GOSUB 5000: GOTO 1500 1999 END 2000 DX=1: DY=0: REM RIGHT 2005 IF X=13 THEN 4000 2010 P1=M(X+13*(Y-1)): GOSUB 9000: IF MOD>0 THEN 4000 2020 FX=3*X-2: FY=3*Y-2: FOR I=1 TO 3 2030 FX=FX+DX: FY=FY+DY 2040 COLOR=BL 2060 FOR K=0 TO 1: FOR L=0 TO 1: PLOT HX+K,HY+L: NEXT L,K: COLOR=GN: FOR K=0 TO 1: FOR L=0 TO 1: PLOT FX+K,FY+L: NEXT L,K: HX=FX: HY=FY 2110 NEXT I 2115 X=X+DX: Y=Y+DY 2116 IF X=13 AND Y=WY THEN 6000 2120 GOTO 1500 2500 DX=-1: DY=0: REM LEFT 2505 IF X=1 THEN 4100 2510 P1=M(X+13*(Y-1)-1): GOSUB 9000: IF MOD>0 THEN 4100 2520 GOTO 2020 3000 DX=0: DY=-1: REM UP 3005 IF Y=1 THEN 4200 3010 IF INT(ABS(M(X+13*(Y-2)))/10)>0 THEN 4200 3020 GOTO 2020 3500 DX=0: DY=1: REM DOWN 3505 IF Y=13 THEN 4300 3510 IF INT(ABS(M(X+13*(Y-1)))/10)>0 THEN 4300 3520 GOTO 2020 4000 GOSUB 5000 4010 COLOR=WH 4020 VLIN 3*(Y-1),3*Y AT 3*X 4030 GOTO 1500 4100 GOSUB 5000 4110 COLOR=WH 4120 VLIN 3*(Y-1),3*Y AT 3*(X-1) 4130 GOTO 1500 4200 GOSUB 5000 4210 COLOR=WH 4220 HLIN 3*(X-1),3*X AT 3*(Y-1) 4230 GOTO 1500 4300 GOSUB 5000 4310 COLOR=WH 4320 HLIN 3*(X-1),3*X AT 3*Y 4330 GOTO 1500 5000 S=S-1: FOR I=1 TO 20: A=PEEK(-16336) + PEEK(-16336) + PEEK(-16336) + PEEK(-16336): NEXT I: RETURN 6000 PRINT "YOU WIN!" 6010 GOSUB 5000: GOSUB 5000: GOSUB 5000 6020 PRINT "SCORE=";S+3 6030 END 7000 REM DRAGON SUB ROUTINE 7000 IF X>SX THEN 7050: REM RIGHT 7001 IF Y>SY THEN 7100: REM DOWN 7002 IF X9 THEN 7080 7070 P1=M(SX+13*(SY-1)): GOSUB 9000: IF MOD>0 THEN 7100 7080 DX=1: DY=0: GOTO 7300 7100 REM DOWN 7100 IF SY=13 THEN 7150 7110 IF T(SX+13*(SY-1))>9 THEN 7130 7120 IF INT(ABS(M(SX+13*(SY-1)))/10) THEN 7150 7130 DX=0: DY=1: GOTO 7300 7150 REM LEFT 7150 IF SX=1 THEN 7200 7160 IF T(SX+13*(SY-1))>9 THEN 7180 7170 P1=M(SX+13*(SY-1)-1): GOSUB 9000: IF MOD>0 THEN 7200 7180 DX=-1: DY=0: GOTO 7300 7200 REM UP 7200 IF SY=1 THEN 7050 7210 IF T(SX+13*(SY-1))>9 THEN 7230 7220 IF INT(ABS(M(SX+13*(SY-1)-13))/10) THEN 7050 7230 DX=0: DY=-1: GOTO 7300 7300 REM DRAW WALLS/DRAGON 7300 COLOR=BL 7310 RX=3*SX-2: RY=3*SY-2 7320 FOR I=1 TO 3: RX=RX+DX: RY=RY+DY 7330 COLOR=BL: FOR K=0 TO 1: FOR L=0 TO 1: PLOT QX+K,QY+L: NEXT L,K 7340 COLOR=RD: FOR K=0 TO 1: FOR L=0 TO 1: PLOT RX+K,RY+l: NEXT L,K: QX=RX: QY=RY 7350 NEXT I 7360 REM UPDATE DRAGON WALLS 7360 SX=SX+DX: SY=SY+DY 7370 T(SX+13*(SY-1))=T(SX+13*(SY-1))+1 7380 RETURN 8000 GOSUB 5000: GOSUB 5000: GOSUB 5000: GOSUB 5000: PRINT "THE DRAGON GON GOT YOU!": END 9000 REM MOD: Remainder of P1 is returned in MOD 9000 MOD=ABS(P1)-10*INT(ABS(P1)/10): RETURN