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 ::::::::::::::::::::::::::::::::::