image of READY prompt

Wang2200.org

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"