|
- 2 PRINT TAB(30);"MASTERMIND"
- 4 PRINT TAB(15);"CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
- 6 PRINT: PRINT: PRINT
- 10 REM
- 20 REM MASTERMIND II
- 30 REM STEVE NORTH
- 40 REM CREATIVE COMPUTING
- 50 REM PO BOX 789-M MORRISTOWN NEW JERSEY 07960
- 60 REM
- 70 REM
- 80 INPUT "NUMBER OF COLORS";C9
- 90 IF C9>8 THEN PRINT "NO MORE THAN 8, PLEASE!":GOTO 80
- 100 INPUT "NUMBER OF POSITIONS";P9
- 110 INPUT "NUMBER OF ROUNDS";R9
- 120 P=C9^P9
- 130 PRINT "TOTAL POSSIBILITIES =";P
- 140 H=0:C=0
- 150 DIM QQ(P9),SS(10,2),SX$(10),AX$(P9),GX$(P9),II(P),HX$(P9)
- 160 L$="BWRGOYPT"
- 170 PRINT
- 180 PRINT
- 190 PRINT "COLOR LETTER"
- 200 PRINT "===== ======"
- 210 FOR X=1 TO C9
- 220 READ X$
- 230 PRINT X$;TAB(13);MID$(L$,X,1)
- 240 NEXT X
- 250 PRINT
- 260 FOR R=1 TO R9
- 270 PRINT
- 280 PRINT "ROUND NUMBER";R;"----"
- 290 PRINT
- 300 PRINT "GUESS MY COMBINATION.":PRINT
- 310 REM GET A COMBINATION
- 320 A=INT(P*RND(1)+1)
- 330 GOSUB 3000
- 340 FOR X=1 TO A
- 350 GOSUB 3500
- 360 NEXT X
- 370 FOR M=1 TO 10
- 380 PRINT "MOVE # ";M;" GUESS ";:INPUT X$
- 390 IF X$="BOARD" THEN 2000
- 400 IF X$="QUIT" THEN 2500
- 410 IF LEN(X$)<>P9 THEN PRINT "BAD NUMBER OF POSITIONS.":GOTO 380
- 420 REM UNPACK X$ INTO GX$(1-P9)
- 430 FOR X=1 TO P9
- 440 FOR Y=1 TO C9
- 450 IF MID$(X$,X,1)=MID$(L$,Y,1) THEN 480
- 460 NEXT Y
- 470 PRINT "'"; MID$(X$,X,1); "' IS UNRECOGNIZED.":GOTO 380
- 480 GX$(X)=MID$(X$,X,1)
- 490 NEXT X
- 500 REM NOW WE CONVERT QQ(1-P9) INTO AX$(1-P9) [ACTUAL GUESS]
- 510 GOSUB 4000
- 520 REM AND GET NUMBER OF BLACKS AND WHITES
- 530 GOSUB 4500
- 540 IF B=P9 THEN 630
- 550 REM TELL HUMAN RESULTS
- 560 PRINT "YOU HAVE ";B;" BLACKS AND ";W;" WHITES."
- 570 REM SAVE ALL THIS STUFF FOR BOARD PRINTOUT LATER
- 580 SX$(M)=X$
- 590 SS(M,1)=B
- 600 SS(M,2)=W
- 610 NEXT M
- 620 PRINT "YOU RAN OUT OF MOVES! THAT'S ALL YOU GET!":GOTO 640
- 622 GOSUB 4000
- 623 PRINT "THE ACTUAL COMBINATION WAS: ";
- 624 FOR X=1 TO P9
- 625 PRINT AX$(X);
- 626 NEXT X
- 627 PRINT
- 630 PRINT "YOU GUESSED IT IN ";M;" MOVES!"
- 640 H=H+M
- 650 GOSUB 5000
- 660 REM
- 670 REM NOW COMPUTER GUESSES
- 680 REM
- 690 FOR X=1 TO P
- 700 II(X)=1
- 710 NEXT X
- 720 PRINT "NOW I GUESS. THINK OF A COMBINATION."
- 730 INPUT "HIT RETURN WHEN READY:";X$
- 740 FOR M=1 TO 10
- 750 GOSUB 3000
- 760 REM FIND A GUESS
- 770 G=INT(P*RND(1)+1)
- 780 IF II(G)=1 THEN 890
- 790 FOR X=G TO P
- 800 IF II(X)=1 THEN 880
- 810 NEXT X
- 820 FOR X=1 TO G
- 830 IF II(X)=1 THEN 880
- 840 NEXT X
- 850 PRINT "YOU HAVE GIVEN ME INCONSISTENT INFORMATION."
- 860 PRINT "TRY AGAIN, AND THIS TIME PLEASE BE MORE CAREFUL."
- 870 GOTO 660
- 880 G=X
- 890 REM NOW WE CONVERT GUESS #G INTO G$
- 900 FOR X=1 TO G
- 910 GOSUB 3500
- 920 NEXT X
- 930 GOSUB 6000
- 940 PRINT "MY GUESS IS: ";
- 950 FOR X=1 TO P9
- 960 PRINT HX$(X);
- 970 NEXT X
- 980 INPUT " BLACKS, WHITES ";B1,W1
- 990 IF B1=P9 THEN 1120
- 1000 GOSUB 3000
- 1010 FOR X=1 TO P
- 1020 GOSUB 3500
- 1030 IF II(X)=0 THEN 1070
- 1035 GOSUB 6500
- 1040 GOSUB 4000
- 1050 GOSUB 4500
- 1060 IF B1<>B OR W1<>W THEN II(X)=0
- 1070 NEXT X
- 1080 NEXT M
- 1090 PRINT "I USED UP ALL MY MOVES!"
- 1100 PRINT "I GUESS MY CPU IS JUST HAVING AN OFF DAY."
- 1110 GOTO 1130
- 1120 PRINT "I GOT IT IN ";M;" MOVES!"
- 1130 C=C+M
- 1140 GOSUB 5000
- 1150 NEXT R
- 1160 PRINT "GAME OVER"
- 1170 PRINT "FINAL SCORE:"
- 1180 GOSUB 5040
- 1190 STOP
- 2000 REM
- 2010 REM BOARD PRINTOUT ROUTINE
- 2020 REM
- 2025 PRINT
- 2030 PRINT "BOARD"
- 2040 PRINT "MOVE GUESS BLACK WHITE"
- 2050 FOR Z=1 TO M-1
- 2060 PRINT Z;TAB(9);SX$(Z);TAB(25);SS(Z,1);TAB(35);SS(Z,2)
- 2070 NEXT Z
- 2075 PRINT
- 2080 GOTO 380
- 2500 REM
- 2510 REM QUIT ROUTINE
- 2520 REM
- 2530 PRINT "QUITTER! MY COMBINATION WAS: ";
- 2535 GOSUB 4000
- 2540 FOR X=1 TO P9
- 2550 PRINT AX$(X);
- 2560 NEXT X
- 2565 PRINT
- 2570 PRINT "GOOD BYE"
- 2580 STOP
- 3000 REM
- 3010 REM INITIALIZE QQ(1-P9) TO ZEROS
- 3020 REM
- 3030 FOR S=1 TO P9
- 3040 QQ(S)=0
- 3050 NEXT S
- 3060 RETURN
- 3500 REM
- 3510 REM INCREMENT QQ(1-P9)
- 3520 REM
- 3522 IF QQ(1)>0 THEN 3530
- 3524 REM IF ZERO, THIS IS OUR FIRST INCREMENT: MAKE ALL ONES
- 3526 FOR S=1 TO P9
- 3527 QQ(S)=1
- 3528 NEXT S
- 3529 RETURN
- 3530 Q=1
- 3540 QQ(Q)=QQ(Q)+1
- 3550 IF QQ(Q)<=C9 THEN RETURN
- 3560 QQ(Q)=1
- 3570 Q=Q+1
- 3580 GOTO 3540
- 4000 REM
- 4010 REM CONVERT QQ(1-P9) TO AX$(1-P9)
- 4020 REM
- 4030 FOR S=1 TO P9
- 4040 AX$(S)=MID$(L$,QQ(S),1)
- 4050 NEXT S
- 4060 RETURN
- 4500 REM
- 4510 REM GET NUMBER OF BLACKS (B) AND WHITES (W)
- 4520 REM MASHES G$ AND A$ IN THE PROCESS
- 4530 REM
- 4540 B=0:W=0:F=0
- 4550 FOR S=1 TO P9
- 4560 IF GX$(S)<>AX$(S) THEN 4620
- 4570 B=B+1
- 4580 GX$(S)=CHR$(F)
- 4590 AX$(S)=CHR$(F+1)
- 4600 F=F+2
- 4610 GOTO 4660
- 4620 FOR T=1 TO P9
- 4630 IF GX$(S)<>AX$(T) THEN 4650
- 4640 IF GX$(T)=AX$(T) THEN 4650
- 4645 W=W+1:AX$(T)=CHR$(F):GX$(S)=CHR$(F+1):F=F+2:GOTO 4660
- 4650 NEXT T
- 4660 NEXT S
- 4670 RETURN
- 5000 REM
- 5010 REM PRINT SCORE
- 5020 REM
- 5030 PRINT "SCORE:"
- 5040 PRINT " COMPUTER ";C
- 5050 PRINT " HUMAN ";H
- 5060 PRINT
- 5070 RETURN
- 5500 REM
- 5510 REM CONVERT QQ(1-P9) INTO GX$(1-P9)
- 5520 REM
- 5530 FOR S=1 TO P9
- 5540 GX$(S)=MID$(L$,QQ(S),1)
- 5550 NEXT S
- 5560 RETURN
- 6000 REM
- 6010 REM CONVERT QQ(1-P9) TO HX$(1-P9)
- 6020 REM
- 6030 FOR S=1 TO P9
- 6040 HX$(S)=MID$(L$,QQ(S),1)
- 6050 NEXT S
- 6060 RETURN
- 6500 REM
- 6510 REM COPY H$ INTO G$
- 6520 REM
- 6530 FOR S=1 TO P9
- 6540 GX$(S)=HX$(S)
- 6550 NEXT S
- 6560 RETURN
- 8000 REM PROGRAM DATA FOR COLOR NAMES
- 8010 DATA BLACK,WHITE,RED,GREEN,ORANGE,YELLOW,PURPLE,TAN
- 9998 REM ...WE'RE SORRY BUT IT'S TIME TO GO...
- 9999 END
|