1  REM *** PEOPLE'S COMPUTER COMPANY
2  REM *** 1919 MENALTO AVENUE   MENLO PARK, CA
3  REM *** 7-74
4  REM *** BASED ON AN IDEA BY JEFF SUMBERG, RIDGEWOOD, NEW JERSEY
5  REM *** WITH HELP FROM JOHN ROBERTSON
50  REM *** VARIABLE CONVENTIONS
52  REM     M$  =>  INPUT MESSAGES
54  REM     D$  =>  STRING FOR DECODING COMMAND
56  REM     E$  =>  STRING FOR DECODING DIFFICULTY OF GRID
58  REM     R   =>  NUMBER OF ROWS IN GRID
60  REM     R1  =>  CURRENT ROW YOU ARE IN
62  REM     R9  =>  PASSING ROW BETWEEN ROUTINES
64  REM     C   =>  NUMBER OF COLUMNS IN GRID
66  REM     C1  =>  CURRENT COLUMN YOU ARE IN
68  REM     C9  =>  PASSING COLUMN BETWEEN ROUTINES
70  REM     K1  =>  NUMBER OF CHECKS YOU HAVE LEFT
72  REM     M1  =>  NUMBER OF MAPS YOU HAVE LEFT
74  REM     S   =>  NUMERICAL REPRESENTATION OF A GO
76  REM     P   =>  NUMERICAL REPRESENTATION OF A STOP
77  REM     P1  =>  NUMBER OF STOPS IN THE GRID
78  REM     Y   =>  NUMERICAL REPRESENTATION OF A POSITION ROVER'S BEEN TO
80  REM     X   =>  NUMERICAL REPRESENTATION OF WHERE ROVER STOPPED
82  REM     Z1  =>  TEMPORARY
84  REM     Z9  =>  RETURN CODE:  0 CONTINUE GAME;  1 STOP
100  REM *** DIMENSIONS AND GLOBAL VARIABLES
104  DIM M$[72],D$[6],E$[3]
108  R=9
112  C=9
116  DIM F[9,9]
120  D$="SCLMIE"
124  E$="NRE"
128  P=0
132  S=1
136  Y=2
140  X=3
190  REM *** INSTRUCTIONS?
192  PRINT "DO YOU WANT INSTRUCTIONS (YES OR NO)";
194  INPUT M$
196  IF M$[1,1] <> "Y" THEN 200
198  GOSUB 2800
200  REM *** INITIALIZE GRID, CHECKS, MAPS
204  GOSUB 2000
208  REM *** FIND A GO STARTING POSITION AND GIVE INFO
212  GOSUB 900
216  REM *** THE GAME PROCEEDS
220  GOSUB 1000
224  REM *** ANOTHER GAME?
228  PRINT 
232  PRINT "DO YOU WANT TO TRY ANOTHER GRID (YES OR NO)";
236  INPUT M$
240  IF M$[1,1]="Y" THEN 200
244  REM *** BYE
248  GOTO 2999
900  REM *** GO STARTING POSITION AND # STOPS, # CHECKS, # MAPS
904  R1=0
908  C1=0
912  PRINT 
916  PRINT "WOULD YOU LIKE A CLUE (YES OR NO)";
920  INPUT M$
924  IF M$[1,1] <> "Y" THEN 960
928  Z1=INT(C/2-1+2*RND(0))
932  IF F[1,Z1]=S THEN 944
936  F[1,Z1]=S
940  P1=P1-1
944  PRINT "HINT: POSITION 1,";Z1;"IS GO"
960  PRINT 
964  PRINT "THERE ARE";P1;"STOPS"
968  PRINT "YOU HAVE";K1;"CHECKS AND";M1;"MAPS"
972  PRINT "GOOD LUCK!"
976  PRINT 
980  RETURN 
1000  REM *** COMMAND DECODER
1004  REM *** THE FIRST LETTER OF EACH COMMAND IS UNIQUE
1008  PRINT 
1012  PRINT "*";
1016  INPUT M$
1020  FOR I=1 TO 6
1024  IF M$[1,1]=D$[I,I] THEN 1040
1028  NEXT I
1032  PRINT "I CAN'T FIGURE OUT WHAT YOU MEAN - TELL ME AGAIN"
1036  GOTO 1008
1040  GOSUB I OF 1100,1200,1300,1400,1500,1600
1044  REM *** CHECK RETURN CODE TO SEE IF GAME IS OVER
1048  IF Z9=0 THEN 1008
1052  RETURN 
1100  REM *** STEP COMMAND
1102  GOSUB 2100
1104  IF (ABS(R1-R9) <= 1) AND (ABS(C1-C9) <= 1) THEN 1120
1105  REM *** CHECK IF THIS IS THE FIRST MOVE
1106  IF (R9=1) AND (C1=0) THEN 1120
1107  IF R1>0 THEN 1112
1108  PRINT "YOU CAN START ANYWHERE IN ROW 1"
1110  GOTO 1102
1112  PRINT "YOU CAN'T STEP FROM";R1;",";C1;"TO";R9;",";C9;"- TRY AGAIN"
1116  GOTO 1102
1120  R1=R9
1124  C1=C9
1128  REM *** CHECK IF IT IS A STOP
1132  IF F[R1,C1]=P THEN 2600
1136  REM *** MARK THAT YOU HAVE BEEN THERE
1140  F[R1,C1]=Y
1144  REM *** CHECK IF YOU HAVE MADE IT TO THE LAST ROW
1148  IF R1=R THEN 2500
1152  PRINT "GO"
1156  RETURN 
1200  REM *** CHECK COMMAND
1204  REM *** SEE IF THERE ARE ANY CHECKS LEFT
1208  IF K1 >= 1 THEN 1220
1212  PRINT "SORRY, BUT YOU'VE ALREADY USED ALL YOUR CHECKS"
1216  RETURN 
1220  K1=K1-1
1224  GOSUB 2100
1228  Z1=F[R9,C9]
1232  IF Z1=P THEN 1246
1236  PRINT "GO"
1240  RETURN 
1246  PRINT "STOP"
1250  RETURN 
1300  REM *** LOOK COMMAND
1304  Z1=0
1308  FOR I=R1+1 TO R
1312  IF F[I,C1] <> P THEN 1320
1316  Z1=Z1+1
1320  NEXT I
1324  PRINT "THERE ARE";Z1;"STOPS STRAIGHT AHEAD"
1328  Z1=0
1332  FOR I=1 TO C
1336  IF F[R1+1,I] <> P THEN 1344
1340  Z1=Z1+1
1344  NEXT I
1348  PRINT "THERE ARE";Z1;"STOPS IN ROW";R1+1
1352  RETURN 
1400  REM *** MAP COMMAND
1404  REM *** SEE IF THERE ARE ANY MAPS LEFT
1408  IF M1 >= 1 THEN 1420
1412  PRINT "SORRY, BUT YOU'VE ALREADY USED ALL YOUR MAPS"
1416  RETURN 
1420  M1=M1-1
1424  REM *** THE MAP IS PRINTED FROM ROW 1 TO ROW R9
1428  R9=R1
1432  GOSUB 2200
1436  RETURN 
1500  REM *** INFO COMMAND
1504  PRINT "ROVER ROBOT IS AT";R1;",";C1
1508  PRINT "YOU HAVE";K1;"CHECKS LEFT"
1512  PRINT "YOU HAVE";M1;"MAPS LEFT"
1516  RETURN 
1600  REM *** END COMMAND
1604  REM *** SET END-OF-GAME RETURN CODE
1608  Z9=1
1612  PRINT "YOU'VE LEFT ROVER ROBOT STRANDED - HOW SELFISH"
1616  GOTO 2616
2000  REM *** INITIALIZE GRID, # OF CHECKS, # OF MAPS
2004  PRINT 
2008  PRINT 
2012  PRINT "WHICH GRID DO YOU WANT - NOVICE, REGULAR, OR EXPERT";
2016  INPUT M$
2020  FOR L1=1 TO 3
2024  IF M$[1,1]=E$[L1,L1] THEN 2036
2028  NEXT L1
2032  GOTO 2012
2036  Z1=.8-L1/10
2040  P1=0
2044  FOR I=1 TO R
2048  FOR J=1 TO C
2052  F[I,J]=INT(RND(0)+Z1)
2056  IF F[I,J]=1 THEN 2064
2060  P1=P1+1
2064  NEXT J
2068  NEXT I
2070  REM *** GUARANTEE ONE STOP IN EACH COLUMN AMONG THE LAST 3 ROWS
2072  FOR I=1 TO C
2074  IF (F[R-2,I]=P) OR (F[R-1,I]=P) OR (F[R,I]=P) THEN 2082
2076  REM *** PLACE A STOP IN THIS COLUMN IN ONE OF THE LAST THREE ROWS
2078  F[R-2+INT(3*RND(0)),I]=P
2080  P1=P1+1
2082  NEXT I
2090  K1=INT(R+R*RND(0))
2092  M1=4-L1
2094  Z9=0
2096  RETURN 
2100  REM *** ROW,COLUMN SUBROUTINE
2104  REM *** RETURN A VALID POSITION IN R9,C9
2108  PRINT "ROW,COLUMN";
2112  INPUT R9,C9
2116  R9=INT(R9)
2120  C9=INT(C9)
2124  IF (R9<1) OR (R9>R) OR (C9<1) OR (C9>C) THEN 2132
2128  RETURN 
2132  PRINT "THAT POSITION IS NOT IN THE GRID - TRY AGAIN"
2136  GOTO 2108
2200  REM *** PRINT A MAP
2204  REM *** ROW 1 TO ROW R9 WILL BE PRINTED
2212  PRINT TAB(5);"*'S ARE ROVER ROBOT'S STEPS"
2220  PRINT 
2224  PRINT TAB(25);"C O L U M N S"
2226  PRINT 
2227  PRINT "  R O W S  ";
2228  FOR I=1 TO C
2232  PRINT TAB(6*(I+1));I;
2236  NEXT I
2240  PRINT 
2244  PRINT 
2248  FOR I=1 TO R9
2252  PRINT TAB(5);I;TAB(9);
2256  FOR J=1 TO C
2260  Z1=F[I,J]
2264  IF Z1 <> S THEN 2276
2268  PRINT "  GO  ";
2272  GOTO 2304
2276  IF Z1 <> P THEN 2288
2280  PRINT " STOP ";
2284  GOTO 2304
2288  IF Z1 <> Y THEN 2300
2292  PRINT "  *   ";
2296  GOTO 2304
2300  PRINT " XXXX ";
2304  NEXT J
2308  PRINT 
2312  PRINT 
2316  NEXT I
2320  PRINT 
2324  PRINT 
2328  RETURN 
2500  REM *** MADE IT TO THE LAST ROW 
2504  REM *** SET END-OF-GAME RETURN CODE
2508  Z9=1
2512  PRINT "HOORAY!"'7'7'7" ROVER ROBOT MADE IT TO ROW";R
2514  PRINT 
2516  PRINT "FINAL MAP (YES OR NO)";
2520  INPUT M$
2524  IF M$[1,1]="Y" THEN 2532
2528  RETURN 
2532  R9=R
2536  GOSUB 2200
2540  RETURN 
2600  REM *** ROVER STOPPED
2604  PRINT "TOO BAD, ROVER ROBOT, YOU'VE LANDED ON A STOP"
2608  REM *** SET END-OF-GAME RETURN CODE
2612  Z9=1
2616  PRINT 
2620  PRINT "FINAL MAP (YES OR NO)";
2624  INPUT M$
2628  IF M$[1,1]="Y" THEN 2636
2632  RETURN 
2636  IF R1*C1=0 THEN 2648
2638  F[R1,C1]=X
2640  R9=R
2644  PRINT TAB(5);"THE 'XXXX' IS WHERE ROVER ROBOT STOPPED"
2648  GOSUB 2200
2652  RETURN 
2800  REM *** INSTRUCTIONS
2802  PRINT 
2804  PRINT "ROVER ROBOT NEEDS YOUR HELP TO GET ACROSS A GRID."
2806  PRINT "EACH SQUARE IS MARKED EITHER 'GO' OR 'STOP'."
2808  PRINT "ROVER CAN CONTINUE MOVING AS LONG AS IT NEVER LANDS ON A 'STOP'"
2810  PRINT 
2812  PRINT "ROVER MAY START AT ANY SQUARE IN ROW 1."
2814  PRINT "IT'S TRYING TO REACH ROW";R
2816  PRINT "YOU MAY CHECK ANY SQUARE TO SEE IF IT IS A 'GO' OR A 'STOP'"
2818  PRINT "BUT YOU ONLY GET A LIMITED NUMBER OF CHECKS."
2820  PRINT "YOU WILL ALSO HAVE A MAP OPTION SHOWING YOU WHERE ROVER ROBOT"
2822  PRINT "HAS BEEN AND ALL THE 'STOPS' UP TO THE CURRENT ROW"
2824  PRINT "SO THAT YOU MAY MOVE ROVER BACK AROUND DEAD ENDS."
2826  PRINT "AGAIN, YOU ONLY GET A CERTAIN NUMBER OF MAPS."
2828  PRINT 
2830  PRINT "HERE ARE THE COMMANDS AVAILABLE AND WHAT EACH ONE DOES:"
2832  PRINT 
2834  PRINT "    STEP   ROVER ROBOT CAN STEP TO ANY SQUARE TOUCHING THE"
2836  PRINT "           ONE IT'S ON - HORIZONTAL, VERTICAL, OR DIAGONAL"
2838  PRINT "           THE COMPUTER WILL ASK FOR ROVER'S NEW SQUARE WITH"
2840  PRINT "    ROW,COLUMN?"
2842  PRINT 
2844  PRINT "    CHECK  YOU MAY CHECK ANY SQUARE TO SEE IF IT IS A 'GO'"
2846  PRINT "           OR A 'STOP'."
2848  PRINT "           THE COMPUTER WILL ASK WHICH SQUARE CHECKED WITH"
2850  PRINT "    ROW,COLUMN?"
2852  PRINT 
2854  PRINT "    LOOK   THE NUMBER OF 'STOPS' STRAIGHT AHEAD FROM WHERE"
2856  PRINT "           ROVER IS TO ROW";R;" AND THE NUMBER OF 'STOPS' IN"
2858  PRINT "           THE NEXT ROW WILL BE PRINTED.  YOU MAY 'LOOK' AS"
2860  PRINT "           MANY TIMES AS YOU WANT TO."
2862  PRINT 
2864  PRINT "    MAP    DRAW A MAP FROM ROW 1 TO THE ROW THAT ROVER ROBOT"
2866  PRINT "           IS CURRENTLY IN.  THE MAP WILL SHOW ROVER'S PATH"
2868  PRINT "           AND EVERY 'GO' AND 'STOP' IN THESE ROWS.  YOU"
2870  PRINT "           GET A LIMITED NUMBER OF MAPS."
2872  PRINT 
2874  PRINT "    INFO   WHERE ROVER ROBOT IS, THE NUMBER OF CHECKS YOU"
2876  PRINT "           HAVE LEFT, AND THE NUMBER OF MAPS LEFT"
2878  PRINT 
2880  PRINT "    END    LEAVE ROVER ROBOT STRANDED IN THE GRID"
2882  PRINT 
2884  PRINT 
2899  RETURN 
2999  END 
