10 REM MSTRM.ECB 15 REM ...************************************************** 20 REM ...*** *** 30 REM ...*** MASTERMIND REV. 1.1 *** 40 REM ...*** *** 50 REM ...*** ANDRE RATTE, QUEBEC, PQ., CANADA *** 60 REM ...*** *** 70 REM ...*** FEB, 10, 1978 *** 80 REM ...************************************************** 90 DIM N(5),M(5),R(5),P(5) 100 PRINT "&K": PRINT "THIS IS THE 'MASTERMIND' GAME" 110 PRINT : INPUT (1,100)"DO YOU WANT THE RULES? (Y OR N)",A$ 120 IF LEN(A$)=0 THEN LET A$="Y" 130 IF A$="N" THEN 300 ELSE PRINT "&K" 140 PRINT "X IN THIS GAME, THE COMPUTER GENERATES INTEGERS X" 150 PRINT "X AND FORMS A 5 DIGIT NUMBER. YOU HAVE TO FIND X" 160 PRINT "X THAT NUMBER. AFTER EACH GUESS, THE COMPUTER X" 170 PRINT "X WILL TELL YOU HOW MANY DIGITS YOU GUESSED X" 180 PRINT "X RIGHT (M), AND HOW MANY YOU GUESSED IN THE X" 190 PRINT "X WRONG POSITION (P). TO WIN, YOU MUST FIND THE X" 200 PRINT "X NUMBER IN LESS THAN 12 MOVES. X" 210 PRINT "X ### THIS GAME HAS 3 OPTIONS: ### X" 220 PRINT "X -- OPTION 1 : THE INTEGERS ARE BETWEEN X" 230 PRINT "X 1 AND 8, AND NO INTEGER X" 240 PRINT "X CAN APPEAR MORE THAN ONCE. X" 250 PRINT "X --OPTION 2 : SAME AS OPTION 1 EXCEPT X" 260 PRINT "X THE INTEGERS CAN BE REPEATED X" 270 PRINT "X --OPTION 3 : THE INTEGERS CAN BE BETWEEN X" 280 PRINT "X 0 AND 8, AND CAN BE REPEATED.X" 290 INPUT (1,0)"*+* Enter any letter when ready to start ---=>",A$ 300 INPUT (1,0)"SELECT OPTION : 1, 2, 3 ---=>",W 310 FOR Y=1 TO 16 320 PRINT 330 NEXT Y 340 REM ... *** N()=NUMBER P()=PLAYER M()=MATCH *** 350 FOR X=1 TO 5 360 LET N(X)=INT(10*RND(0)) 370 NEXT X 380 GOSUB 1350 390 IF W=3 THEN 460 400 GOSUB 1430 410 IF W<>1 THEN 460 420 GOSUB 1510 430 IF K=0 THEN 460 440 GOTO 380 450 REM ... *** DECOMPOSITION OF PLAYER'S NUMBER *** 460 LET M=0: LET T=0 470 PRINT " TRY # = = = = = MATCH POS. GUESS"; 480 INPUT (5,0)" ---=>",C 490 IF C<88889 THEN 520 500 PRINT C;" Is an ILLEGAL NUMBER, TRY AGAIN "; 510 GOTO 480 520 LET N2=0 530 FOR E=4 TO 0 STEP -1 540 LET I=INT(C/10^E) 550 LET P(5-E)=I 560 LET R=C-I*10^E 570 LET C=R 580 IF I=9 THEN 640 590 IF W=3 THEN 620 600 IF I=0 THEN 640 610 GOTO 650 620 LET N2=0 630 GOTO 610 640 LET N2=1 650 NEXT E 660 IF N2=1 THEN 500 670 REM ... *** COMPARE FOR MATCH *** 680 LET M=0 690 FOR L=1 TO 5 700 LET R(L)=0 710 LET M(L)=0 720 NEXT L 730 FOR B=1 TO 5 740 IF N(B)<>P(B) THEN 780 750 LET M(B)=1 760 LET M=M+1 770 LET R(B)=1 780 NEXT B 790 LET T=T+1 800 IF M>5 THEN 990 810 REM ... *** POSITION *** 820 LET P=0 830 IF M=5 THEN 1000 840 FOR G=1 TO 5 850 IF M(G)=1 THEN 940 860 FOR H=1 TO 5 870 IF P(G)<>N(H) THEN 930 880 IF R(H)=1 THEN 930 890 IF M(G)=1 THEN 930 900 LET R(H)=1 910 LET M(G)=1 920 LET P=P+1 930 NEXT H 940 NEXT G 950 IF T>12 THEN 1000 960 PRINT " ";T;TAB(13);P(1);P(2);P(3);P(4);P(5); 970 PRINT TAB(30);M;TAB(36);P;TAB(43);"GUESS"; 980 GOTO 480 990 LET P=0 1000 PRINT " ";T;TAB(13);P(1);P(2);P(3);P(4);P(5); 1010 PRINT TAB(30);M;TAB(36);P 1020 PRINT 1030 IF M=5 THEN 1050 1040 GOTO 1120 1050 IF T=1 THEN 1270 1060 IF T<6 THEN 1210 1070 IF T<=7 THEN 1180 1080 IF T>8 THEN 1290 1090 IF T<11 THEN 1250 1100 IF T=11 THEN 1230 1110 IF T>11 THEN 1160 1120 PRINT "SORRY, YOU LOST. " 1130 PRINT "THE NUMBER WAS...";N(1);N(2);N(3);N(4);N(5) 1140 PRINT "BETTER CHANCE NEXT TIME ####" 1150 GOTO 1300 1160 PRINT "YOU WON AFTER ";T," PASSES, YOUR PERFORMANCE WAS VERY POOR" 1170 GOTO 1300 1180 PRINT "### CONGRATULATIONS ###": PRINT 1190 PRINT "YOU WON AFTER ";T;" PASSES, YOUR PERFORMANCE WAS EXCELLENT ###" 1200 GOTO 1300 1210 PRINT "YOU WON AFTER ONLY ";T;" PASSES,YOU WERE LUCKY #####" 1220 GOTO 1300 1230 PRINT "YOU WON AFTER ";T;" PASSES, YOUR PERFORMANCE WAS POOR." 1240 GOTO 1300 1250 PRINT "YOU WON AFTER ";T;" PASSES,YOUR PERFORMANCE WAS GOOD." 1260 GOTO 1300 1270 PRINT "YOU WON AFTER ONLY ONE PASS, YOU WERE VERY LUCKY ###" 1280 GOTO 1300 1290 PRINT "YOU WON AFTER ";T;" PASSES, YOUR PERFORMANCE WAS VERY GOOD #" 1300 PRINT 1310 INPUT (1,0)"DO YOU WANT TO PLAY AGAIN ? (Y)",Y$ 1320 IF LEN(Y$)=0 THEN LET Y$="Y" 1330 IF Y$="Y" THEN 300 ELSE 1660 1340 REM ... *** SUBROUTINE : ELIMINATION OF 9'S *** 1350 LET J=1 1360 FOR J=1 TO 5 1370 IF N(J)<>9 THEN 1400 1380 LET N(J)=INT(10*RND(0)) 1390 GOTO 1370 1400 NEXT J 1410 RETURN 1420 REM ... *** SUBROUTINE : ELIMINATION 0F 0'S *** 1430 FOR Z=1 TO 5 1440 IF N(Z)<>0 THEN 1480 1450 LET N(Z)=INT(10*RND(0)) 1460 IF N(Z)=9 THEN 1450 1470 GOTO 1440 1480 NEXT Z 1490 RETURN 1500 REM ... *** SUBROUTINE : REPEATS ELIMINATION *** 1510 LET K=0 1520 FOR D=1 TO 5 1530 LET P(D)=N(D) 1540 NEXT D 1550 FOR F=1 TO 5 1560 FOR A=1 TO 5 1570 IF N(F)<>P(A) THEN 1630 1580 IF F=A THEN 1630 1590 LET L=N(F)+1 1600 LET N(F)=L 1610 LET P(F)=N(F) 1620 LET K=1 1630 NEXT A 1640 NEXT F 1650 RETURN 1660 END