10 REM === GAME TEMPLATE === 20 DIM ANS$ : DIM PROMPT$ : DIM RESP : DIM MIN : DIM MAX : DIM SHOW : DIM RESULT 22 REM === DATA SECTION === 30 DIM RUNNING : DIM GAMEOVER 40 DIM ATTEMPT : DIM GUESS : DIM GUESSED : DIM SCORE : DIM DIGITS(3) 50 DIM VALS(3) : DIM VALIN : DIM RETARRAY(3) : DIM RETVAL : DIM ARRAYIN(3) 60 DIM BAGELS$ 90 PRINT "*** BAGELS : B.A.S.I.C. ***" : RUNNING = 1 : SCORE = 0 100 REM === RUNNING LOOP START === 110 GAMEOVER = 0 : GOSUB 7000 120 IF RESP = 1 THEN GOSUB 9000 130 GOSUB 1200 140 ATTEMPT = 1 150 PRINT "OK, I HAVE A NUMBER IN MIND." 200 REM === GAME LOOP START === 210 IF GAMEOVER = 1 THEN GOTO 900 220 GOSUB 1000 230 GUESSED = 0 : GOSUB 3000 240 IF GUESSED = 1 THEN GOTO 300 250 ATTEMPT = ATTEMPT + 1 260 IF ATTEMPT > 20 THEN GOTO 1100 270 GOTO 200 300 PRINT "YOU GOT IT!!!" 310 SCORE = SCORE + 1 900 REM === GAME LOOP END === 920 RESP = 0 : GOSUB 6000 930 IF RESP = 1 THEN GAMEOVER = 0 940 IF RESP = 0 THEN GOTO 4000 960 GOTO 130 1000 REM === ASK FOR GUESS === 1010 PRINT "GUESS #"ATTEMPT 1020 INPUT GUESS 1030 IF GUESS > -1 THEN GOTO 1050 1040 PRINT "PLEASE GUESS A NON-NEGATIVE NUMBER." : GOTO 1000 1050 IF GUESS > 99 AND GUESS < 1000 THEN RETURN 1060 PRINT "PLEASE GUESS A NUMBER BETWEEN 100 AND 999." : GOTO 1000 1100 REM == DISPLAY GAME OVER === 1110 PRINT "OH WELL, THAT'S TWENTY GUESSES." 1120 ARRAYIN(0)=DIGITS(0):ARRAYIN(1)=DIGITS(1):ARRAYIN(2)=DIGITS(2) 1130 GOSUB 2100 1140 PRINT "MY NUMBER WAS"RETVAL".":PRINT "" : GOTO 900 1200 REM === CREATE THE DIGITS === 1210 RANDOMIZE TIMER 1220 DIGITS(0) = INT(RND(0)*9)+1 1230 DIGITS(1) = INT(RND(0)*9) 1240 IF DIGITS(1) <> DIGITS(0) THEN GOTO 1260 1250 RANDOMIZE TIMER : GOTO 1230 1260 DIGITS(2) = INT(RND(0)*9) 1270 IF DIGITS(2) <> DIGITS(1) AND DIGITS(2) <> DIGITS(0) THEN RETURN 1280 RANDOMIZE TIMER : GOTO 1260 2000 REM === MAKE ARRAY FROM INT === 2010 RETARRAY(0) = INT(VALIN / 100) 2020 RETARRAY(1) = INT((VALIN - (RETARRAY(0) * 100)) / 10) 2030 RETARRAY(2) = VALIN - (RETARRAY(0) * 100) - (RETARRAY(1) * 10) 2040 RETURN 2100 REM === MAKE INT FROM ARRAY === 2110 RETVAL = (ARRAYIN(0) * 100 ) + (ARRAYIN(1) * 10) + ARRAYIN(2) 2120 RETURN 3000 REM === CHECK GUESS === 3010 VALIN = GUESS : GOSUB 2000 3020 VALS(0) = 0 : VALS(1) = 0 : VALS(2) = 0 3030 IF RETARRAY(0) = DIGITS(0) THEN VALS(0) = 1 3040 IF RETARRAY(1) = DIGITS(1) THEN VALS(1) = 1 3050 IF RETARRAY(2) = DIGITS(2) THEN VALS(2) = 1 3060 ARRAYIN(0)=VALS(0): ARRAYIN(1)=VALS(1):ARRAYIN(2)=VALS(2):GOSUB 2100 3070 GUESSED = 0 : IF RETVAL = 111 THEN GUESSED = 1 : RETURN 3080 IF VALS(0) > 0 THEN GOTO 3100 3090 IF RETARRAY(0) = DIGITS(1) OR RETARRAY(0) = DIGITS(2) THEN VALS(0) = 2 3100 IF VALS(1) > 0 THEN GOTO 3120 3110 IF RETARRAY(1) = DIGITS(0) OR RETARRAY(1) = DIGITS(2) THEN VALS(1) = 2 3120 IF VALS(2) > 0 THEN GOTO 3140 3130 IF RETARRAY(2) = DIGITS(0) OR RETARRAY(2) = DIGITS(1) THEN VALS(2) = 2 3140 ARRAYIN(0)=VALS(0):ARRAYIN(1)=VALS(1):ARRAYIN(2)=VALS(2):GOSUB 2100 3150 IF RETVAL = 0 THEN PRINT "BAGELS" : RETURN 3160 BAGELS$ = "" 3170 IF VALS(0) = 1 THEN BAGELS$ = "FERMI " 3180 IF VALS(0) = 2 THEN BAGELS$ = "PICO " 3190 IF VALS(1) = 1 THEN BAGELS$ = BAGELS$ + "FERMI " 3200 IF VALS(1) = 2 THEN BAGELS$ = BAGELS$ + "PICO " 3210 IF VALS(2) = 1 THEN BAGELS$ = BAGELS$ + "FERMI" 3220 IF VALS(2) = 2 THEN BAGELS$ = BAGELS$ + "PICO" 3230 PRINT BAGELS$ 3240 RETURN 4000 REM === RUNNING LOOP END === 4010 PRINT "A"SCORE"POINT BAGELS BUFF!" 4020 PRINT "HOPE YOU HAD FUN. BYE!" 4999 END 5000 REM === ASK A QUESTION === 5010 PRINT PROMPT$ 5020 INPUT ANS$ 5030 IF ANS$="YES" OR ANS$="Y" OR ANS$="yes" OR ANS$="y" THEN RESP=1 : RETURN 5040 IF ANS$="NO" OR ANS$="N" OR ANS$="no" OR ANS$="n" THEN RESP=0 : RETURN 5050 PRINT "PLEASE ANSWER ""YES"" OR ""NO""" 5060 GOTO 5010 6000 REM === ASK TO PLAY AGAIN === 6010 PROMPT$ = "DO YOU WANT TO PLAY AGAIN?" 6020 GOSUB 5000 6030 RETURN 7000 REM === ASK TO SEE THE RULES === 7010 PROMPT$ = "DO YOU WANT TO SEE THE RULES?" 7020 GOSUB 5000 7030 RETURN 8000 REM === GENERATE RANDOM NUMBER === 8010 RANDOMIZE TIMER 8020 RESULT = INT(RND(0)*MAX)+MIN 8030 IF SHOW = 1 THEN PRINT RESULT 8040 RETURN 9000 REM === DISPLAY THE RULES === 9010 PRINT "I WILL THINK OF A THREE-DIGIT NUMBER. YOU WILL TRY TO GUESS MY" 9020 PRINT "NUMBER AND I WILL GIVE YOU CLUES AS FOLLOWS:" 9030 PRINT " PICO - ONE DIGIT CORRECT BUT IN THE WRONG POSITION" 9040 PRINT " FERMI - ONE DIGIT CORRECT AND IN THE CORRECT POSITION" 9050 PRINT " BAGELS - NO DIGITS ARE CORRECT" : PRINT "" 9060 PRINT "YOU GET TWENTY TRIES BEFORE YOU LOSE." : PRINT "" 9100 RETURN