Listing of file='RATMAZE' on disk='vmedia/more_games.wvd.zip'
# Sector 1180, program filename = 'RATMAZE' 0010 REM \E0\C6 0020 REM \D8\C1 THIS IS AN EXAMPLE OF LEFT SLOPE #1 0030 REM ------------------------------------------- 0040 REM \C9\D0 0050 REM \C2\E4 THIS IS AN EXAMPLE OF RIGHT SLOPE #1 0060 REM ------------------------------------------- 0070 REM \D8\C3 THIS IS AN EXAMPLE OF LEFT SLOPE #2 0080 REM ------------------------------------------- 0090 REM \C3\E4 THIS IS AN EXAMPLE OF RIGHT SLOPE #2 0100 REM ------------------------------------------- 0110 REM \F0\CC\C3 THIS IS AN EXAMPLE OF LEFT SLOPE #3 0120 REM ------------------------------------------- 0130 REM \C3\CC\F0 THIS IS AN EXAMPLE OF RIGHT SLOPE #3 0140 REM ------------------------------------------- 0150 REM \F0\F0\CC\CC\C3\C3 THIS IS AN EXAMPLE OF LEFT SLOPE #4 0160 REM ------------------------------------------- 0170 REM \C3\C3\CC\CC\F0\F0 THIS IS AN EXAMPLE OF RIGHT SLOPE #4 0180 REM ------------------------------------------- 0190 PRINT HEX(03060202020F) 0200 DIM L1$2,L2$2,L3$6,L4$6,M(23,23),K$1,D$(4)5,L(23,23) 0210 L1$="\D8\C3" : L2$="\C3\E4" : L3$="\F0\F0\CC\CC\C3\C3" : L4$="\C3\C3\CC\CC\F0\F0" 0220 D$(1)="EAST" : D$(2)="SOUTH" : D$(3)="WEST" : D$(4)="NORTH" 0230 GOSUB 2230 0240 PRINT HEX(03) : M=0 : $PSTAT="RAT MAZE" 0250 INPUT "ENTER THE DIFFICULTY LEVEL (1-19)",M9 0260 M9=M9+4 0270 PRINT HEX(03) 0280 MAT REDIM M(M9,M9) 0281 MAT REDIM L(M9,M9) 0290 PRINT AT(10,30);"GENERATING MAZE" 0300 PRINT AT(12,33);"STAND BY!" 0310 MAT M=ZER : MAT L=ZER 0320 FOR I=1 TO M9 : FOR I1=1 TO M9 : M(I,I1)=11 : NEXT I1 : NEXT I 0330 X=INT(RND(1)*M9)+1 : Y=INT(RND(1)*M9)+1 : C=M9*M9 0340 IF C=1 THEN 550 0350 R,D,L,U=0 : M(Y,X)=-ABS(M(Y,X)) : C=C-1 0360 IF X=M9 THEN 370 : IF M(Y,X+1)>0 THEN R=M(Y,X+1) 0370 IF Y=M9 THEN 380 : IF M(Y+1,X)>0 THEN D=M(Y+1,X) 0380 IF X=1 THEN 390 : IF M(Y,X-1)>0 THEN L=M(Y,X-1) 0390 IF Y=1 THEN 400 : IF M(Y-1,X)>0 THEN U=M(Y-1,X) 0400 Q=R+D+L+U 0410 IF Q<3 AND INT(RND(1)*10)<2 OR Q=0 THEN 520 0420 D0=INT(RND(1)*4) 0430 ON D0+1 GOTO 440,460,480,500 0440 IF R=0 THEN 420 : M(Y,X)=M(Y,X)+1 : X=X+1 0450 GOTO 340 0460 IF D=0 THEN 420 : M(Y,X)=M(Y,X)+10 : Y=Y+1 0470 GOTO 340 0480 IF L=0 THEN 420 : M(Y,X-1)=M(Y,X-1)-1 : X=X-1 0490 GOTO 340 0500 IF U=0 THEN 420 : M(Y-1,X)=M(Y-1,X)-10 : Y=Y-1 0510 GOTO 340 0520 X=INT(RND(1)*M9)+1 : Y=INT(RND(1)*M9+1) 0530 IF M(Y,X)>0 THEN 520 0540 C=C+1 : GOTO 340 0550 X,X2=INT(RND(1)*M9)+1 0560 Y,Y2=1 0570 X1=INT(RND(1)*M9)+1 0580 Y1=M9 0590 M(X1,Y1)=ABS(M(X1,Y1)) : M(X1,Y1)=M(X1,Y1)-1 0600 H=1 0610 PRINT HEX(03060202020F) 0620 PRINT AT(3,0);BOX(21,78) 0630 PRINT AT(0,0);"YOU ARE FACING ";D$(H);",";M9-Y;"COLUMN'S AWAY FROM GOAL." 0631 L(X,Y)=L(X,Y)+1 0640 REM %^ * DRAW SQUARE #1 * 0650 FOR A=1 TO 6 0660 PRINT AT(24-A,A*2);L1$;AT(24-A,76-(A*2));L2$; 0670 IF A>2 THEN 690 0680 PRINT AT(10-A,A*6-4);L3$;AT(10-A,72-(A*6-4));L4$; 0690 NEXT A 0700 PRINT AT(10,2);BOX(14,0);AT(10,75);BOX(14,0) 0710 PRINT AT(8,13);BOX(10,51) 0720 REM * CHECK IF SQUARE #2 CAN BE SEEN * 0730 REM * IF YES, ERASE TOP OF SQUARE #2 * 0740 D=0 : ON H GOSUB 760,770,780,790 0750 GOTO 850 0760 IF X=X1 AND Y=Y1 THEN 810 : IF ABS(M(X,Y))=0 OR ABS(M(X,Y))=10 THEN 800 : ELSE RETURN 0770 IF ABS(M(X,Y))=0 OR ABS(M(X,Y))=1 THEN 800 : ELSE RETURN 0780 IF X=X2 AND Y=Y2 THEN 820 : IF Y=1 THEN RETURN : IF ABS(M(X,Y-1))=0 OR ABS(M(X,Y-1))=10 THEN 800 : ELSE RETURN 0790 IF X=1 THEN RETURN : IF ABS(M(X-1,Y))=0 OR ABS(M(X-1,Y))=1 THEN 800 : ELSE RETURN 0800 PRINT AT(8,13);BOX(0,-51);AT(18,13);BOX(0,-51) : D=1 : RETURN 0810 PRINT AT(11,31);BOX(7,15);AT(18,31);BOX(0,-15);AT(9,36);BOX(1,5);AT(9,37) ;"EXIT" : RETURN 0820 PRINT AT(11,31);BOX(7,15);AT(9,34);BOX(1,9);AT(9,35);"ENTRANCE" 0830 FOR A=34 TO 45 STEP 3 : PRINT AT(11,A);BOX(7,0) : NEXT A : RETURN 0840 REM * DRAW LINE IF LEFT IS OPEN * 0850 ON H GOSUB 870,880,890,900 0860 GOTO 930 0870 IF X=1 THEN RETURN : IF ABS(M(X-1,Y))=0 OR ABS(M(X-1,Y))=1 THEN 910 : ELSE RETURN 0880 IF ABS(M(X,Y))=0 OR ABS(M(X,Y))=10 THEN 910 : ELSE RETURN 0890 IF ABS(M(X,Y))=0 OR ABS(M(X,Y))=1 THEN 910 : ELSE RETURN 0900 IF Y=1 THEN RETURN : IF ABS(M(X,Y-1))=0 OR ABS(M(X,Y-1))=10 THEN 910 : ELSE RETURN 0910 PRINT AT(18,2);BOX(0,11) : FOR A=1 TO 6 : PRINT AT(24-A,A*2);HEX(C0C0); : NEXT A : RETURN 0920 REM * DRAW LINE IF RIGHT IS OPEN * 0930 ON H GOSUB 950,960,970,980 0940 GOTO 1000 0950 IF ABS(M(X,Y))=0 OR ABS(M(X,Y))=1 THEN 990 : ELSE RETURN 0960 IF Y=1 THEN RETURN : IF ABS(M(X,Y-1))=0 OR ABS(M(X,Y-1))=10 THEN 990 : ELSE RETURN 0970 IF X=1 THEN RETURN : IF ABS(M(X-1,Y))=0 OR ABS(M(X-1,Y))=1 THEN 990 : ELSE RETURN 0980 IF ABS(M(X,Y))=0 OR ABS(M(X,Y))=10 THEN 990 : ELSE RETURN 0990 PRINT AT(18,64);BOX(0,11) : FOR A=1 TO 6 : PRINT AT(24-A,76-(A*2));HEX(C0C0); : NEXT A : RETURN 1000 IF D=0 THEN 1940 1010 REM %^ * DRAW SQUARE #2 * 1020 FOR A=1 TO 5 1030 PRINT AT(18-A,A*2+12);L1$;AT(18-A,76-(A*2+12));L2$ 1040 IF A>2 THEN 1060 1050 PRINT AT(8-A,A*6+8);L3$;AT(8-A,72-(A*6+8));L4$ 1060 NEXT A 1070 PRINT AT(6,23);BOX(7,31) 1080 REM * CHECK IF SQUARE #3 CAN BE SEEN * 1090 REM * IF YES, ERASE TOP OF SQUARE #3 * 1100 D=0 : ON H GOSUB 1120,1130,1140,1150 1110 GOTO 1210 1120 IF X=X1 AND Y+1=Y1 THEN 1170 : IF ABS(M(X,Y+1))=0 OR ABS(M(X,Y+1))=10 THEN 1160 : ELSE RETURN 1130 IF ABS(M(X+1,Y))=0 OR ABS(M(X+1,Y))=1 THEN 1160 : ELSE RETURN 1140 IF X=X2 AND Y-1=Y2 THEN 1180 : IF Y-1=1 THEN RETURN : IF ABS(M(X,Y-2))=0 OR ABS(M(X,Y-2))=10 THEN 1160 : ELSE RETURN 1150 IF X-1=1 THEN RETURN : IF ABS(M(X-2,Y))=0 OR ABS(M(X-2,Y))=1 THEN 1160 : ELSE RETURN 1160 PRINT AT(6,23);BOX(0,-31);AT(13,23);BOX(0,-31) : D=1 : RETURN 1170 PRINT AT(8,35);BOX(5,8);AT(13,35);BOX(0,-8) : RETURN 1180 PRINT AT(8,35);BOX(5,8) 1190 FOR A=37 TO 43 STEP 2 : PRINT AT(8,A);BOX(5,0) : NEXT A : RETURN 1200 REM * DRAW LINE IF LEFT IS OPEN * 1210 ON H GOSUB 1230,1240,1250,1260 1220 GOTO 1290 1230 IF X=1 THEN RETURN : IF ABS(M(X-1,Y+1))=0 OR ABS(M(X-1,Y+1))=1 THEN 1270 : ELSE RETURN 1240 IF ABS(M(X+1,Y))=0 OR ABS(M(X+1,Y))=10 THEN 1270 : ELSE RETURN 1250 IF Y=1 THEN RETURN : IF ABS(M(X,Y-1))=0 OR ABS(M(X,Y-1))=1 THEN 1270 : ELSE RETURN 1260 IF Y=1 OR X=1 THEN RETURN : IF ABS(M(X-1,Y-1))=0 OR ABS(M(X-1,Y-1))=10 THEN 1270 : ELSE RETURN 1270 PRINT AT(13,13);BOX(0,10) : FOR A=1 TO 5 : PRINT AT(18-A,A*2+12);HEX(C0C0); : NEXT A : RETURN 1280 REM * DRAW LINE IF RIGHT IS OPEN * 1290 ON H GOSUB 1310,1320,1330,1340 1300 GOTO 1360 1310 IF ABS(M(X,Y+1))=0 OR ABS(M(X,Y+1))=1 THEN 1350 : ELSE RETURN 1320 IF Y=1 THEN RETURN : IF ABS(M(X+1,Y-1))=0 OR ABS(M(X+1,Y-1))=10 THEN 1350 : ELSE RETURN 1330 IF X=1 OR Y=1 THEN RETURN : IF ABS(M(X-1,Y-1))=0 OR ABS(M(X-1,Y-1))=1 THEN 1350 : ELSE RETURN 1340 IF X=1 THEN RETURN : IF ABS(M(X-1,Y))=0 OR ABS(M(X-1,Y))=10 THEN 1350 : ELSE RETURN 1350 PRINT AT(13,54);BOX(0,10) : FOR A=1 TO 5 : PRINT AT(18-A,76-(A*2+12));HEX(C0C0); : NEXT A : RETURN 1360 IF D=0 THEN 1940 1370 REM %^ * DRAW SQUARE #3 * 1380 FOR A=1 TO 4 1390 PRINT AT(13-A,22+(A*2));L1$;AT(13-A,54-(A*2));L2$ 1400 IF A=1 THEN PRINT AT(5,26);L3$;AT(5,46);L4$ 1410 NEXT A 1420 PRINT AT(5,31);BOX(4,15) 1430 REM * CHECK IF SQUARE #4 CAN BE SEEN * 1440 D=0 : ON H GOSUB 1460,1470,1480,1490 1450 GOTO 1550 1460 IF X=X1 AND Y+2=Y1 THEN 1510 : IF ABS(M(X,Y+2))=0 OR ABS(M(X,Y+2))=10 THEN 1500 : ELSE RETURN 1470 IF ABS(M(X+2,Y))=0 OR ABS(M(X+2,Y))=1 THEN 1500 : ELSE RETURN 1480 IF X=X2 AND Y-2=Y2 THEN 1520 : IF Y-2=1 THEN RETURN : IF ABS(M(X,Y-3))=0 OR ABS(M(X,Y-3))=10 THEN 1500 : ELSE RETURN 1490 IF X-2=1 THEN RETURN : IF ABS(M(X-3,Y))=0 OR ABS(M(X-3,Y))=1 THEN 1500 : ELSE RETURN 1500 PRINT AT(5,31);BOX(0,-15);AT(9,31);BOX(0,-15) : D=1 : RETURN 1510 PRINT AT(6,36);BOX(3,5);AT(9,36);BOX(0,-5) : RETURN 1520 PRINT AT(6,36);BOX(3,5) 1530 FOR A=37 TO 41 : PRINT AT(6,A);BOX(3,0) : NEXT A : RETURN 1540 REM * DRAW LINE IF LEFT IS OPEN * 1550 ON H GOSUB 1570,1580,1590,1600 1560 GOTO 1630 1570 IF X=1 THEN RETURN : IF ABS(M(X-1,Y+2))=0 OR ABS(M(X-1,Y+2))=1 THEN 1610 : ELSE RETURN 1580 IF ABS(M(X+2,Y))=0 OR ABS(M(X+2,Y))=10 THEN 1610 : ELSE RETURN 1590 IF Y-1=1 THEN RETURN : IF ABS(M(X,Y-2))=0 OR ABS(M(X,Y-2))=1 THEN 1610 : ELSE RETURN 1600 IF Y=1 OR X-1=1 THEN RETURN : IF ABS(M(X-2,Y-1))=0 OR ABS(M(X-2,Y-1))=10 THEN 1610 : ELSE RETURN 1610 PRINT AT(9,23);BOX(0,8) : FOR A=1 TO 4 : PRINT AT(13-A,22+(A*2));HEX(C0C0); : NEXT A : RETURN 1620 REM * DRAW LINE IF RIGHT IS OPEN * 1630 ON H GOSUB 1650,1660,1670,1680 1640 GOTO 1700 1650 IF ABS(M(X,Y+2))=0 OR ABS(M(X,Y+2))=1 THEN 1690 : ELSE RETURN 1660 IF Y=1 THEN RETURN : IF ABS(M(X+2,Y-1))=0 OR ABS(M(X+2,Y-1))=10 THEN 1690 : ELSE RETURN 1670 IF X=1 OR Y-1=1 THEN RETURN : IF ABS(M(X-1,Y-2))=0 OR ABS(M(X-1,Y-2))=1 THEN 1690 : ELSE RETURN 1680 IF X-1=1 THEN RETURN : IF ABS(M(X-2,Y))=0 OR ABS(M(X-2,Y))=10 THEN 1690 : ELSE RETURN 1690 PRINT AT(9,46);BOX(0,8) : FOR A=1 TO 4 : PRINT AT(13-A,54-(A*2));HEX(C0C0); : NEXT A : RETURN 1700 IF D=0 THEN 1940 1710 REM %^ * DRAW SQUARE #4 * 1720 FOR A=1 TO 3 1730 PRINT AT(9-A,30+(A*2));L1$;AT(9-A,46-(A*2));L2$ 1740 IF A=1 THEN PRINT AT(4,32);L3$;AT(4,40);L4$ 1750 NEXT A 1760 PRINT AT(4,37);BOX(2,3) 1770 REM * DRAW LINE IF LEFT IS OPEN * 1780 ON H GOSUB 1800,1810,1820,1830 1790 GOTO 1860 1800 IF X=1 THEN RETURN : IF ABS(M(X-1,Y+3))=0 OR ABS(M(X-1,Y+3))=1 THEN 1840 : ELSE RETURN 1810 IF ABS(M(X+3,Y))=0 OR ABS(M(X+3,Y))=10 THEN 1840 : ELSE RETURN 1820 IF Y-2=1 THEN RETURN : IF ABS(M(X,Y-3))=0 OR ABS(M(X,Y-3))=1 THEN 1840 : ELSE RETURN 1830 IF Y=1 OR X-2=1 THEN RETURN : IF ABS(M(X-3,Y-1))=0 OR ABS(M(X-3,Y-1))=10 THEN 1840 : ELSE RETURN 1840 PRINT AT(6,31);BOX(0,6) : FOR A=1 TO 3 : PRINT AT(9-A,30+(A*2));HEX(C0C0); : NEXT A : RETURN 1850 REM * DRAW LINE IF RIGHT IS OPEN * 1860 ON H GOSUB 1880,1890,1900,1910 1870 GOTO 1940 1880 IF ABS(M(X,Y+3))=0 OR ABS(M(X,Y+3))=1 THEN 1920 : ELSE RETURN 1890 IF Y=1 THEN RETURN : IF ABS(M(X+3,Y-1))=0 OR ABS(M(X+3,Y-1))=10 THEN 1920 : ELSE RETURN 1900 IF X=1 OR Y-2=1 THEN RETURN : IF ABS(M(X-1,Y-3))=0 OR ABS(M(X-1,Y-3))=1 THEN 1920 : ELSE RETURN 1910 IF X-2=1 THEN RETURN : IF ABS(M(X-3,Y))=0 OR ABS(M(X-3,Y))=10 THEN 1920 : ELSE RETURN 1920 PRINT AT(6,40);BOX(0,6) : FOR A=1 TO 3 : PRINT AT(9-A,46-(A*2));HEX(C0C0); : NEXT A : RETURN 1930 REM %^ * BEGIN INPUT ROUTINE * 1940 KEYIN K$ 1950 IF NUM(K$)<>1 THEN 2080 1960 CONVERT K$ TO K 1970 IF K<>0 AND K<>4 AND K<>5 AND K<>6 THEN 1940 1980 ON K+1 GOSUB 2110,,,,2000,2020,2010 1990 GOTO 610 2000 H=H-1 : IF H=0 THEN H=4 : RETURN 2010 H=H+1 : IF H=5 THEN H=1 : RETURN 2020 ON H GOSUB 2040,2050,2060,2070 2030 M=M+1 : RETURN 2040 IF X=X1 AND Y=Y1 THEN 2090 : IF ABS(M(X,Y))=0 OR ABS(M(X,Y))=10 THEN Y=Y+1 : ELSE GOTO 2080 : RETURN 2050 IF ABS(M(X,Y))=0 OR ABS(M(X,Y))=1 THEN X=X+1 : ELSE GOTO 2080 : RETURN 2060 IF Y=1 THEN 2080 : IF ABS(M(X,Y-1))=0 OR ABS(M(X,Y-1))=10 THEN Y=Y-1 : ELSE GOTO 2080 : RETURN 2070 IF X=1 THEN 2080 : IF ABS(M(X-1,Y))=0 OR ABS(M(X-1,Y))=1 THEN X=X-1 : ELSE GOTO 2080 : RETURN 2080 PRINT HEX(07) : GOTO 1940 2090 PRINT AT(1,0);"CONGRATULATIONS, YOU MADE IT OUT IN ONLY";M;"MOVES";AT(2,0 );"PRESS (-RETURN-) TO PLAY AGAIN OR ANY OTHER KEY TO SEE MAZE FROM THE T OP." 2100 KEYIN K$ : IF K$<>HEX(0D) THEN GOSUB 2110 : RETURN CLEAR ALL : MAT REDIM M(23,23) : MAT REDIM L(23,23) : GOTO 240 2110 PRINT HEX(03) 2120 FOR I=0 TO M9 : PRINT AT(I,0);BOX(0,M9*3) : NEXT I 2130 FOR I=0 TO M9*3 STEP 3 : PRINT AT(0,I);BOX(M9,0) : NEXT I 2131 PRINT AT(X2-1,0);BOX(-1,0) 2140 FOR A=1 TO M9 2150 FOR B=1 TO M9 2160 IF ABS(M(A,B))=0 OR ABS(M(A,B))=10 THEN PRINT AT(A-1,B*3);BOX(-1,0) 2170 IF ABS(M(A,B))=0 OR ABS(M(A,B))=1 THEN PRINT AT(A,B*3-3);BOX(0,-3) 2171 IF L(A,B)<>0 THEN PRINT AT(A-1,B*3-2);"." 2180 NEXT B 2190 NEXT A 2200 PRINT AT(X-1,Y*3-1);"X" 2210 KEYIN K$ 2220 RETURN 2230 PRINT HEX(03) 2240 PRINT AT(1,34);HEX(020400020E);" RAT'S MAZE ";HEX(020400000E) 2250 PRINT AT(2,33);"By Mike Kircher" : PRINT : PRINT "Welcome to the Rat's Maze. I'm sure you've played the old maze ga me before." 2260 PRINT "A random maze is generated and you have to find your way out looki ng at a top" 2270 PRINT "view of the maze. Pretty easy, right?" 2280 PRINT : PRINT "Well in this version, you get to play the rat's part and see how h e feels. A" 2290 PRINT "random maze is generated and you are placed in column 1 facing eas t in a random" 2300 PRINT "row. Your goal in life is to get out. This is accomplished by re aching the" 2310 PRINT "exit located somewhere in the last column. How far you must go is determined" 2320 PRINT "by the difficulty level chosen (1-19). Level 1 will generate a 5x 5 maze, while" 2330 PRINT "higher levels will generate larger mazes up to a maximum of 23x23. " 2340 PRINT : PRINT "You have only three commands; (4) Turn left (5) Go forward (6) T urn right." 2350 PRINT "You also know what direction you are facing (since you can't smell the cheese.)" 2360 PRINT : PRINT "Good luck, you'll need it!!!" 2370 PRINT : PRINT "Press (-RETURN-) to begin." 2380 PRINT AT(1,34);HEX(020400000E); " RAT'S MAZE " : FOR A=1 TO 2000 : NEXT A : PRINT AT(1,34);HEX(020400020E);" RAT'S MAZE " : FOR A=1 TO 2000 : NEXT A : KEYIN K$,2390,2390 : GOTO 2380 2390 PRINT HEX(0204000E) : RETURN 2400 STOP 9999 DEFFN'31 : SCRATCH T"RATMAZE" : SAVE DC T()"RATMAZE"