Create a simple version of the board game:   Mastermind.

It must be possible to:

   choose the number of colors will be used in the game (2 - 20)
   choose the color code length (4 - 10)
   choose the maximum number of guesses the player has (7 - 20)
   choose whether or not colors may be repeated in the code


The (computer program) game should display all the player guesses and the results of that guess.

Display (just an idea):



 Feature 
 Graphic Version 
 Text Version


 Player guess

 Colored circles

 Alphabet letters


Correct color & position

Black circle

X


Correct color

White circle

O


None

Gray circle

 -




A text version example:        1.   ADEF   -   XXO- 

Translates to:

the first guess;

the four colors (ADEF);

result:

 two correct colors and spot, 
 one correct color/wrong spot, one color isn't in the code.
Happy coding!



Related tasks

   Bulls and cows
   Bulls and cows/Player
   Guess the number
   Guess the number/With Feedback


'--- Declaration of global variables ---
Dim As String colors(1 To 4) => {"A", "B", "C", "D"}
Dim Shared As Integer nr, ub', numlet=4, lencod=4
Dim Shared As String*4 master, pz
ub = Ubound(colors)
nr = 0
 
'--- SUBroutines and FUNCtions ---
Sub Encabezado
    Dim As String dup
    Color 11: Print "Welcome to Mastermind"
    Print "=====================" + Chr(13) + Chr(10) : Color 15
    Print "You will need to guess a random code."
    Print "For each guess, you will receive a hint:"
    Print "X - denotes a correct letter,"
    Print "O - denotes a letter in the original"
    Print "    string but a different position."
    Print "You have 12 attempts."
    Print "Duplicates are not allowed." + Chr(10)
    Print "Good luck!" + Chr(10) + Chr(10) : Color 7    
End Sub 
 
Sub showresult(test() As String, place1 As Byte, place2 As Byte, place3 As Byte)
    Dim As Integer r, n1, n2, n3
    Print Using "##: "; nr;
    For r = 1 To Ubound(test)
        Print test(r);
    Next R
    Print "  : ";
    For n1 = 1 To place1
        Print "X"; " ";
    Next N1
    For n2 = 1 To place2
        Print "O"; " ";
    Next N2
    For n3 = 1 To place3
        Print "-"; " ";
    Next N3
    Print : Print
End Sub
 
Sub Inicio
    Dim As Integer mind(ub), rands(ub)
    Dim As Integer n, aleat
    Dim As Boolean repeat = false
 
    For n = 1 To ub
        While true
            aleat = (Rnd * (ub-1)) + 1
            If rands(aleat) <> 1 Then
                mind(n) = aleat
                rands(aleat) = 1
                Exit While
            End If
        Wend
    Next n
 
    For n = 1 To ub
        Mid(master,n,1) = Chr(64 + mind(n))
        pz &= Chr(64 + mind(n))
    Next n
End Sub
 
 
'--- Main Program ---
Randomize Timer
Cls
Dim As Integer guesses = 12
Encabezado
Inicio
Color 15: Print pz : Color 7
Do
    Dim As Integer n, p, d, x, posic
    Dim As Integer places(1 To 2), place1, place2, place3
    Dim As String*4 testbegin
    Dim As String test(ub), mastertemp, tmp
    Dim As Boolean flag = True   
 
    For p = 1 To Ubound(places)
        places(p) = 0
    Next p
    nr += 1
    Input "Your guess (ABCD)? " , testbegin
    For d = 1 To Ubound(test)
        test(d) = Mid(testbegin,d,1)
    Next d
 
    For n = 1 To Ubound(test)
        If Ucase(test(n)) <> Mid(master,n,1) Then flag = False
    Next n
    If flag = True Then 
        Color 10: Print !"\nWell done! You guess correctly." : Sleep : Exit Do
    Else
        For x = 1 To Len(master)
            If Ucase(test(x)) = Mid(master,x,1) Then places(1) += 1
        Next x
        mastertemp = master
        For p = 1 To Ubound(test)
            posic = Instr(mastertemp, Ucase(test(p)))
            If posic > 0 Then
                tmp = mastertemp
                mastertemp = Left(tmp,posic-1) + Mid(tmp, posic+1, Len(tmp)-1)
                places(2) += 1
            End If
        Next p
    End If
    place1 = places(1) 
    place2 = places(2) - place1
    place3 = Len(master) - (place1 + place2)
    showresult(test(), place1, place2, place3)
Loop Until nr = guesses
Color 14: Print "The correct combination was: "; pz
Color 7: Print !"\nEnd of game"
Sleep