10  REM-ABASE-A NUMBER GUESSING GAME USING DIFFERENT BASES
20  REM-PETER KATZ, 10/5/73, RAVENSWOOD
30  DIM A$[15],B$[15]
40  L=8
50  REM  THE NUMBER OF GUESSES CAN BE CHANGED BY CHANGING 'L' IN LINE 40
60  PRINT "THIS IS A NUMBER GUESSING GAME USING DIFFERENT BASES"
70  PRINT "YOU TELL THE COMPUTER WHAT BASE YOU WISH TO PLAY IN."
80  PRINT "THE COMPUTER WILL SELECT A NUMBER IN YOUR BASE"
90  PRINT "AND YOU TRY TO GUESS THE NUMBER."
100  PRINT "THE COMPUTER WILL TELL YOU IF YOUR GUESS IS TOO HIGH,"
110  PRINT "TOO LOW, OR IN THE WRONG BASE."
120  PRINT "YOU WILL HAVE "L" TRIES TO GUESS THE NUMBER."
130  PRINT 
140  PRINT "WHAT BASE DO YOU WISH TO PLAY IN";
150  INPUT Z
160  IF Z<11 AND Z>1 AND Z=INT(Z) THEN 200
170  PRINT "PLEASE TRY A BASE BETWEEN 2 AND 10"
180  GOTO 140
190  REM  THE COMPUTER PICKS THE NUMBER
200  P=INT(100*RND(0))+1
210  X=0
220  A=1
230  IF P<Z^A THEN 260
240  A=A+1
250  GOTO 230
260  A=A-1
270  IF A=0 THEN 390
280  B=1
290  J=B*Z^A
300  IF J>P THEN 330
310  B=B+1
320  GOTO 290
330  B=B-1
340  J=B*Z^A
350  Y=B*10^A
360  X=X+Y
370  P=P-J
380  GOTO 260
390  E=X+P
400  Z1=Z-1
410  RESTORE 
420  FOR C=1 TO Z1
430  READ D
440  NEXT C
450  G=1
460  F=D
470  GOSUB 990
480  PRINT "O.K. I HAVE A NUMBER IN MIND BETWEEN 1 AND "B$" BASE "Z
490  PRINT TAB(10);"---- GUESS #"G;
500  INPUT Y
510  IF Y>D OR Y<1 THEN 800
520  R=0
530  Q=Y
540  GOSUB 840
550  IF R=1 THEN 780
560  IF Y=E THEN 650
570  G=G+1
580  IF G=L+1 THEN 740
590  REM  THE COMPUTER FINDS OUT IF YOUR NUMBER IS TOO HIGH OR TOO LOW
600  IF Y>E THEN 630
610  PRINT TAB(5);"TOO LOW.  GUESS #"G;
620  GOTO 500
630  PRINT TAB(5);"TOO HIGH. GUESS #"G;
640  GOTO 500
650  IF G=1 THEN 720
660  PRINT "RIGHT!"'7'7"! IT TOOK YOU "G" GUESSES."
670  PRINT "DO YOU WANT TO PLAY AGAIN";
680  INPUT R$[1,1]
690  IF R$[1,1]="N" THEN 1180
700  PRINT 
710  GOTO 140
720  PRINT "WOW!"'7'7"! YOU GOT IT IN 1 GUESS!"'7"!"
730  GOTO 670
740  F=E
750  GOSUB 990
760  PRINT "YOU LOSE, BUCKWHEAT!"'7'7" THE NUMBER IN BASE "Z" WAS "B$
770  GOTO 670
780  PRINT '7'7'7"THERE IS NO SUCH NUMBER IN BASE "Z".  TRY AGAIN."
790  GOTO 490
800  PRINT '7'7"I SAID A NUMBER BETWEEN 1 AND "B$".  TRY AGAIN."
810  GOTO 490
820  REM   THIS SUBROUTINE FINDS OUT IF THE NUMBER IS ACCEPTABLE
830  REM  IN THE GIVEN BASE
840  A=1
850  IF Q<10^A THEN 880
860  A=A+1
870  GOTO 850
880  A=A-1
890  IF A=0 THEN 940
900  W=INT(.1^A*Q+.00005)
910  IF W >= Z THEN 960
920  Q=Q-10^A*W
930  GOTO 880
940  IF Q >= Z THEN 960
950  GOTO 970
960  R=1
970  RETURN 
980  REM  THIS SUBROUTINE CHANGES THE NUMBER INTO A STRING
990  A$="1234567890"
1000  B$=""
1010  S=1
1020  K=6
1030  IF F >= 10^K THEN 1070
1040  K=K-1
1050  GOTO 1030
1060  K=K-1
1070  T=INT(.1^K*F+.00005)
1080  F=F-10^K*T
1090  IF T=0 THEN 1140
1100  B$[S,S]=A$[T,T]
1110  IF K=0 THEN 1160
1120  S=S+1
1130  GOTO 1060
1140  B$[S,S]=A$[10,10]
1150  GOTO 1110
1160  RETURN 
1170  DATA 1.1001E+06,10201,1210,400,244,202,144,121,100
1180  END 
