Fives   (Model A)


A deceptively easy game. Try to find the computer's five-digit numbers by asking just four simple arithmetic questions. Be warned, it is very addictive!

    1 REM *** FIVES ***
    2 REM *** FIVES ***
   10 GOTO 500
   20 ** FIVES **
   30 CONVERTED & MODIFIED FOR BBC MICRO
   40   By Max Lang              27 June 1983
   50   :
   60   FROM A SPECTRUM PROGRAM
   70   BY MICHAEL BEWS
   80   :
   90   :
  100   ROUTINE INDEX
  110   -------------
  120   MAIN PROGRAM
  130   RANDOM NUMBER:......1000
  140   GET CHAR:...........1100
  150   GUESS:..............1200
  160   RESIGN:.............1400
  170   CORRECT:............1500
  180   WRONG:..............1600
  190   INSTRUCTIONS:.......1700
  200   TITLE:.............10000
  210   WAIT:..............10200
  220   YN:................10300
  230   SPACEBAR:..........10500
  240   BYE:...............10600
  250   ::::::::::::::::::::::::::::::::::
  500   REM MAIN PROGRAM
  510   MODE7
  520   PROC_TITLE("FIVES",1)
  530   SIGN$="+-*/"
  540   PROC_RANDOM
  550   CLS
  560   PRINT TAB(15,1)"F I V E S"
  570   PRINT TAB(0,18)"Now enter your questi
ons - one at a time"
  580   FOR X=1 TO 4
  590     PRINT TAB(0,X*3);X;") ";
  600     PROC_GET_CHAR("FIVES")
  610     PRINT G$;
  620     FIRST$=MID$(NUM$,P,1)
  630     PROC_GET_CHAR(SIGN$)
  640     PRINT G$;
  650     SIGN$=LEFT$(SIGN$,P-1)+MID$(SIGN$,P
+1)
  660     S$=G$
  670     PROC_GET_CHAR("FIVES")
  680     SECOND$=MID$(NUM$,P,1)
  690     IF SECOND$=FIRST$ THEN GOTO 670
  700     PRINT G$;
  710     T=EVAL(FIRST$+S$+SECOND$)
  720     PRINT "=";T
  730   NEXT X
  740   PRINT TAB(0,18)"Now enter your guess 
as a five figure   number - ie. 12345.    To 
resign press ";
  750   PROC_GUESS
  760   IF GUES$="?" THEN PROC_RESIGN:GOTO 78
0
  770   IF GUES$=NUM$ THEN PROC_CORRECT ELSE 
PROC_WRONG:GOTO 740
  780   PRINT TAB(0,23)"Another go ? (Y/N) ";
  790   PROC_YN
  800   IF YES THEN PRINT "Yes"; ELSE PRINT "
No";
  810   PROC_WAIT(150)
  820   IF YES THEN GOTO 530
  830   PROC_BYE
  840   ::::::::::::::::::::::::::::::::::
 1000   DEF PROC_RANDOM
 1010   FOR X=1 TO 5
 1020     R$=STR$(RND(9))
 1030     IF X=1 THEN NUM$=R$:GOTO 1060
 1040     IF INSTR(NUM$,R$) THEN GOTO 1020
 1050     NUM$=NUM$+R$
 1060   NEXT X
 1070   ENDPROC
 1080   ::::::::::::::::::::::::::::::::::
 1100   DEF PROC_GET_CHAR(C$)
 1110   *FX21,0
 1120   REPEAT
 1130     G$=GET$
 1140     P=INSTR(C$,G$)
 1150   UNTIL P<>0
 1160   ENDPROC
 1170   ::::::::::::::::::::::::::::::::::
 1200   DEF PROC_GUESS
 1210   INPUT GUES$
 1220   IF GUES$="?" THEN ENDPROC
 1230   IF LEN(GUES$)=5 THEN GOTO 1270
 1240   PRINTTAB(0,20)STRING$(LEN(GUES$)," ")
 1250   PRINTTAB(39,19);
 1260   GOTO 1210
 1270   X=0
 1280   X=X+1
 1290   M=ASC(MID$(GUES$,X,1))
 1300   IF M<48 OR M>57 THEN GOTO 1240
 1310   IF X<5 THEN GOTO 1280
 1320   ENDPROC
 1330   ::::::::::::::::::::::::::::::::::
 1400   DEF PROC_RESIGN
 1410   PRINT TAB(0,18)STRING$(120," ")
 1420   PRINT TAB(0,18)"The answer is ";NUM$
 1430   FOR X=1 TO 4:SOUND 1,-15,12-3*X,20:NE
XT X
 1440   ENDPROC
 1450   ::::::::::::::::::::::::::::::::::
 1500   DEF PROC_CORRECT
 1510   PRINT TAB(0,18)STRING$(80," ")
 1520   PRINT TAB(0,18)CHR$(136);"YES";CHR$(1
37);" thats correct"
 1530   FOR X=1 TO 150:SOUND 1,-15,X*5,1:NEXT
 X
 1540   ENDPROC
 1550   ::::::::::::::::::::::::::::::::::
 1600   DEF PROC_WRONG
 1610   PRINT TAB(0,19)STRING$(20," ")
 1620   PRINT TAB(0,18)"NO ";GUES$;" is not t
he correct answer      "
 1630   SOUND 1,-15,10,20:SOUND 0,-15,6,20
 1640   PRINT TAB(0,23)"Press any key to cont
inue";
 1650   G=GET
 1660   PRINT TAB(0,23)STRING$(30," ")
 1670   ENDPROC
 1680   ::::::::::::::::::::::::::::::::::
 1700   DEF PROC_INSTRUCT
 1710   CLS
 1720   PRINT TAB(1,1)"F I V E S"
 1730   PRINT TAB(1,2)"---------"
 1740   PRINT TAB(0,4)"1) I will think of a n
umber containing     five different digits."
 1750   PRINT:PRINT "2) To help you guess wha
t my number is     I will answer four questio
ns in the     form eg. F*I, or V-F, or S/E, o
r V+S."
 1760   PRINT:PRINT "3) But you are only allo
wed to use each    *,/,+ and - sign once - so
 think        carefully about your questions.
"
 1770   PRINT:PRINT "4) When you have asked t
he questions I     will give you the chance t
o guess my    number."
 1780   PROC_SPACEBAR
 1790   ENDPROC
 1800   ::::::::::::::::::::::::::::::::::
10000   DEF PROC_TITLE(T$,I):REM I=0 - NO INS
TRUCTION OPTION, I=1 - OPTION
10010   CLS
10020   PRINT TAB(1,1)"Max Lang"
10030   PRINTTAB(19-LEN(T$)/2,10)CHR$(141);T$
10040   PRINTTAB(19-LEN(T$)/2,11)CHR$(141);T$
10050   PROC_WAIT(150)
10060   IF I=0 THEN ENDPROC
10070   PRINT TAB(0,22)"Do you require instru
ctions ? ";
10080   PROC_YN
10090   IF YES THEN PRINT "Yes"; ELSE PRINT "
No";
10100   PROC_WAIT(150)
10110   IF YES THEN PROC_INSTRUCT
10120   ENDPROC
10130   ::::::::::::::::::::::::::::::::::
10200   DEF PROC_WAIT(T)
10210   LOCAL NOW
10220   NOW=TIME
10230   REPEAT
10240   UNTIL TIME=NOW+T
10250   ENDPROC
10260   ::::::::::::::::::::::::::::::::::
10300   DEF PROC_YN
10310   *FX21,0
10320   LOCAL G
10330   REPEAT
10340     G=GET
10350     G=G+32*(G>95): REM CONVERT TO CAPIT
ALS
10360     YES=(G=89)
10370     NO=(G=78)
10380   UNTIL YES OR NO
10390   ENDPROC
10400   ::::::::::::::::::::::::::::::::::
10500   DEF PROC_SPACEBAR
10510   PRINT TAB(0,23)"Press SPACEBAR to con
tinue.";
10520   LOCAL G
10530   *FX21,0
10540   REPEAT
10550     G=GET
10560   UNTIL G=32
10570   CLS
10580   ENDPROC
10590   ::::::::::::::::::::::::::::::::::
10600   DEF PROC_BYE
10610   CLS
10620   PRINT TAB(18,10)CHR$(141);"BYE"
10630   PRINT TAB(18,11)CHR$(141);"BYE"
10640   PRINT TAB(0,23);
10650   END
10660   ::::::::::::::::::::::::::::::::::