Imports System Imports System.Text Imports System.Text.RegularExpressions Module Word ' Here's the list of potential words that could be selected ' as the winning word. Dim words As String() = {"DINKY", "SMOKE", "WATER", "GRASS", "TRAIN", "MIGHT", "FIRST", "CANDY", "CHAMP", "WOULD", "CLUMP", "DOPEY"} ' ' Outputs the instructions of the game. ' Private Sub intro() Console.WriteLine("WORD".PadLeft(37)) Console.WriteLine("CREATIVE COMPUTING MORRISTOWN, NEW JERSEY".PadLeft(59)) Console.WriteLine("I am thinking of a word -- you guess it. I will give you") Console.WriteLine("clues to help you get it. Good luck!!") End Sub ' ' This allows the user to enter a guess - doing some basic validation ' on those guesses. ' ' The guess entered by the user Private Function get_guess() As String Dim guess As String = "" While (guess.Length = 0) Console.WriteLine($"{Environment.NewLine}Guess a five letter word. ") guess = Console.ReadLine().ToUpper() If ((guess.Length <> 5) Or guess.Equals("?") Or Not Regex.IsMatch(guess, "^[A-Z]+$")) Then guess = "" Console.WriteLine("You must guess a give letter word. Start again.") End If End While Return guess End Function ' ' This checks the user's guess against the target word - capturing ' any letters that match up between the two as well as the specific ' letters that are correct. ' ' The user's guess ' The 'winning' word ' A string showing which specific letters have already been guessed ' The integer value showing the number of character matches between guess and target Private Function check_guess(guess As String, target As String, progress As StringBuilder) As Integer ' Go through each letter of the guess And see which ' letters match up to the target word. ' For each position that matches, update the progress ' to reflect the guess Dim matches As Integer = 0 Dim common_letters As String = "" For ctr As Integer = 0 To 4 ' First see if this letter appears anywhere in the target ' And, if so, add it to the common_letters list. If (target.Contains(guess(ctr))) Then common_letters.Append(guess(ctr)) End If ' Then see if this specific letter matches the ' same position in the target. And, if so, update ' the progress tracker If (guess(ctr).Equals(target(ctr))) Then progress(ctr) = guess(ctr) matches += 1 End If Next Console.WriteLine($"There were {matches} matches and the common letters were... {common_letters}") Console.WriteLine($"From the exact letter matches, you know......... {progress}") Return matches End Function ' ' This plays one full game. ' Private Sub play_game() Dim guess_word As String, target_word As String Dim guess_progress As StringBuilder = New StringBuilder("-----") Dim rand As Random = New Random() Dim count As Integer = 0 Console.WriteLine("You are starting a new game...") ' Randomly select a word from the list of words target_word = words(rand.Next(words.Length)) ' Just run as an infinite loop until one of the ' endgame conditions are met. While (True) ' Ask the user for their guess guess_word = get_guess() count += 1 ' If they enter a question mark, then tell them ' the answer and quit the game If (guess_word.Equals("?")) Then Console.WriteLine($"The secret word is {target_word}") Return End If ' Otherwise, check the guess against the target - noting progress If (check_guess(guess_word, target_word, guess_progress) = 0) Then Console.WriteLine("If you give up, type '?' for your next guess.") End If ' Once they've guess the word, end the game. If (guess_progress.Equals(guess_word)) Then Console.WriteLine($"You have guessed the word. It took {count} guesses!") Return End If End While End Sub ' ' The main entry point for the class - just keeps ' playing the game until the user decides to quit. ' Public Sub play() intro() Dim keep_playing As Boolean = True While (keep_playing) play_game() Console.WriteLine($"{Environment.NewLine}Want to play again? ") keep_playing = Console.ReadLine().StartsWith("y", StringComparison.CurrentCultureIgnoreCase) End While End Sub End Module Module Program Sub Main(args As String()) Word.play() End Sub End Module