Microsoft Small Basic

Program Listing: JBH373-2
' MASTERMIND for SmallBasic by DaveyWavey, March 2010. v1
' modified by Nonki Takahashi, October 2019. v3
' Program ID JBH373-2

LF=Text.GetCharacter(10) ' a linefeed character to help with text layout

TextWindow.WriteLine("MASTERMIND:" +LF+LF+ "The computer has chosen a 4 character sequence using the letters A,B,C,D,E,F." +LF+ "Each letter may be used more than once.")

' let computer choose a random set of letters
computer[1]=text.GetSubText("ABCDEF", Math.GetRandomNumber(6), 1)
computer[2]=text.GetSubText("ABCDEF", Math.GetRandomNumber(6), 1)
computer[3]=text.GetSubText("ABCDEF", Math.GetRandomNumber(6), 1)
computer[4]=text.GetSubText("ABCDEF", Math.GetRandomNumber(6), 1)

' now let the player try to guess what the computer has chosen
try = "True"
While try
tries=tries+1

TextWindow.Writeline(LF+LF+"Enter your Four Guesses. Press ENTER after each guess: "+LF)
For lwp=1 To 4
TextWindow.Write("Letter "+lwp+" = ")
player[tries][lwp]=Text.GetSubText(Text.ConvertToUpperCase(TextWindow.Read()), 1, 1) ' only accept first character entered
EndFor

TextWindow.Clear()
TextWindow.WriteLine("MASTERMIND:"+LF+LF+"The computer has chosen a 4 character sequence using the letters A,B,C,D,E,F."+LF+"Each letter may be used more than once."+LF+LF)
TextWindow.WriteLine("Scoring: 1=letter and position correct; 0=correct letter,wrong position" +LF+LF)

For lwp=1 To tries
TextWindow.Write("Try "+lwp+": "+player[lwp][1]+player[lwp][2]+player[lwp][3]+player[lwp][4]+" = ")

line=computer
For column=1 To 4
If line[column]=player[lwp][column] Then
TextWindow.Write("1")
line[column]="" ' matched
EndIf
EndFor
For column=1 To 4
color=player[lwp][column]
If Array.ContainsValue(line, color) Then
TextWindow.Write("0")
RemoveColorFromLine() 'matched
EndIf
EndFor

TextWindow.WriteLine("")
EndFor

If player[tries][1]=computer[1] And player[tries][2]=computer[2] And player[tries][3]=computer[3] And player[tries][4]=computer[4] Then
try = "False"
EndIf
EndWhile

TextWindow.WriteLine("")
TextWindow.WriteLine("CONGRATULATIONS, YOU GOT IT!" +LF+LF)

Sub RemoveColorFromLine
' param line - colors given by player
' param color - to remove
For _column=1 To 4
If line[_column]=color Then
line[_column]="" ' mached
_column=4 ' exit For
EndIf
EndFor
EndSub