' BASIC Anywhere Machine version of the game "Mastermind" found in David Ahl's "More BASIC Computer Games"
' Original program by David G. Struble
' BASIC Anywhere Machine conversion by johnno56


Locate , 24: Print "MASTERMIND"
Locate , 20: Print "CREATIVE COMPUTING"
Locate , 18: Print "MORRISTOWN, NEW JERSEY"
Print: Print: Print
Print "THE GAME OF MASTERMIND"
Print
Print "COLOR CODES:"
Print "               R=RED     O=ORANGE     Y=YELLOW"
Print "               G=GREEN   B=BLUE       P=PURPLE"
Print

Dim B$(10), Y(10), Z(10), C(4), G(4), R(4)

C(0) = 4

Randomize Timer

label190:

For N = 1 To 4
    C(N) = Int(6 * Rnd(1) + 1)
Next N
For N = 1 To 4
    X = C(N)
    GoSub label730
    C(N) = X
Next N
P$ = ""
For X1 = 1 To 4
    P$ = P$ + Chr$(C(X1))
Next X1

' PRINT P$  - THIS IS THE CODE!  SHHH!!!

For P = 1 To 10

    label290:

    Print
    Print "MOVE NUMBER "; P;
    Input G$: G$ = UCase$(G$)
    If G$ = "BOARD" Then GoTo label910
    If G$ = "QUIT" Then GoTo label440
    B$(P) = G$
    GoSub label520
    If B = 4 Then GoTo label1010
    GoSub label600
    Print B; " BLACK PEGS"
    Y(P) = B
    Print W; " WHITE PEGS"
    Z(P) = W
Next P

Print: Print "SORRY, YOU LOSE"

label440:

Print: Print "THE CORRECT CODE WAS: "; P$

label450:

Print: Print "WANT TO PLAY AGAIN ";
Input A$: A$ = UCase$(A$)
If A$ = "YES" Or A$ = "Y" Then
	Cls
	Print "COLOR CODES:"
	Print "               R=RED     O=ORANGE     Y=YELLOW"
	Print "               G=GREEN   B=BLUE       P=PURPLE"
	Print
	GoTo label190
End If
Print
End

Rem COMPUTE BLACK PEGS

label520:

For X1 = 1 To 4
    G(X1) = Asc(Mid$(G$, X1, 1))
Next X1
B = 0
For K = 1 To 4
    If G(K) <> C(K) Then GoTo label570
    B = B + 1

    label570:
Next K
Return

Rem COMPUTE WHITE PEGS

label600:

For X1 = 1 To 4
    R(X1) = Asc(Mid$(P$, X1, 1))
Next X1
W = 0
For I = 1 To 4
    For J = 1 To 4
        If G(I) <> R(J) Then GoTo label680
        W = W + 1
        R(J) = 0
        GoTo label690

        label680:

    Next J

    label690:

Next I
W = W - B
Return

Rem TRANSLATE COLOR CODES TO NUMERICS

label730:

If X <> 1 Then GoTo label760
X = 89
Return

label760:

If X <> 2 Then GoTo label790
X = 82
780 Return

label790:

If X <> 3 Then GoTo label820
X = 80
Return

label820:

If X <> 4 Then GoTo label850
X = 79
Return

label850:

If X <> 5 Then GoTo label880
X = 71
Return

label880:

X = 66
Return

Rem PRINT BOARD SUMMARY

label910:

V = P - 1
Print "GUESS", "BLACKS", "WHITES"
Print "--—", "---—", "---—"
For I = 1 To V
    Print B$(I), Y(I), Z(I)
Next I
GoTo label290

label1010:

Print: Print "YOU WIN!!": Print
If P < 2 Then
	Print "YOU ARE ALMOST AS SMART AS I AM..."
	_DELAY 3: PRINT" .... or you cheated!"
End If
If P > 1 And P < 5 Then Print "VERY GOOD SCORE!"
If P > 4 And P < 8 Then Print "NOT TOO BAD."
If P > 7 And P < 11 Then Print "ROOM FOR IMPROVEMENT."
Print
GoTo label450
End