Сохранение строки с последующим ее отображением с надписью - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь сохранить строку из поля ввода, а затем отобразить ее с черточками в lblbox для игры палача для класса.

Это задачи, с которыми я борюсь:

  • отредактируйте программу, чтобы разрешить использование секретного слова любой длины.

  • программа позволит «догадчику» угадать в 2 раза длину слова.В качестве примера, слово «код» даст всего 8 догадок.

  • По мере того, как пользователь угадывает буквы, содержащиеся в слове, программа:
    Подсчитывает количество попыток, совершенных пользователем.
    Замените соответствующую черту (-) направильная буква, если правильная буква была угадана.

  • Когда все буквы угаданы правильно, все тире (-) должны быть заменены соответствующими буквами и окном сообщениядолжно появиться сообщение «Отличная работа, играющая в палача.!»

  • Если пользователь не может угадать правильное слово в количестве разрешенных догадок;тире (-) следует заменить на ИГРУ ЗАВЕРШЕНО!и должно появиться окно с сообщением «Извините, что правильным словом было ________»

  • 2 бонусных балла будут начислены за отображение всех неправильных букв угадать в 3-м элементе управления ярлыком.

  • Еще 4 дополнительных бонусных балла будут начислены за то, что вы не разрешили или подсчитали пользователя, который угадал одну и ту же неправильную букву дважды.

Вот мой код:

Dim strSecretWord As String
Dim strLetterGuessed As String
Dim blnDashReplaced As Boolean
Dim intNumberOfRemainingGuesses As Integer = 10
Dim intNumofGuesses As Integer = 0

lblSecretWord.Text = ""
lblNumberOfAttempts.Text = ""

'start game and have 1st user input a 5 letter word that 2nd player needs to guess
strSecretWord = InputBox("Please input a 5 letter word for user to guess:", "Please input secret word.").ToUpper


'displays five dashes for the secret word
lblSecretWord.Text = lblSecretWord.Text & "-----"


'guessing player recieves inputbox to make letter guesses 
MessageBox.Show("The length of the word is 5 letters, you will be given 10 guesses", "10 guesses", MessageBoxButtons.OK)
MessageBox.Show("Player who gets to guess, BE READY!", "Good Luck Guessing", MessageBoxButtons.OK)

'Counts number of attempts player gets (10) and replaces dashes with guessed letter if correct
'If guessed letter was incorrect, user loses a turn
For intNumberofGuesses = 1 To 10
    strLetterGuessed = InputBox("Please guess a letter:", "Letter Guess").ToUpper


    'Uses an IntIndex counter of 0 to 4 to execute 5 times (5 dashes)
    'Also uses the value of intIndex to check each of the 5 locations of the strSecretWord
    For intIndex As Integer = 0 To 4

        'if the user has guessed a correct letter then remove a dash and insert the correct letter guessed
        If strSecretWord.Substring(intIndex, 1) = strLetterGuessed Then
            lblSecretWord.Text = lblSecretWord.Text.Remove(intIndex, 1)
            lblSecretWord.Text = lblSecretWord.Text.Insert(intIndex, strLetterGuessed)
            blnDashReplaced = True
        End If
    Next intIndex

    'If the user guessed a correct letter on their last guess the blnDashReplaced is set and the true condition of the If statement is executed
    If blnDashReplaced = True Then

        'if there are no more dashes, and the game has been solved.
        If lblSecretWord.Text.Contains("-") = False Then
            MessageBox.Show("Great Job playign Hangman!", "Game Over", MessageBoxButtons.OK)
            lblRemainingNumberOfAttempts.Text = ""
            lblNumberOfAttempts.Text = ""
            Exit Sub
        Else
            blnDashReplaced = False
        End If
    Else

    End If
    lblNumberOfAttempts.Text = intNumberofGuesses
    intNumberOfRemainingGuesses = intNumberOfRemainingGuesses - 1
    lblRemainingNumberOfAttempts.Text = intNumberOfRemainingGuesses

Next
lblSecretWord.Text = "GAME OVER!"
MessageBox.Show("Better luck next time. Sorry the correct word was " & strSecretWord & ".", "You Lost", MessageBoxButtons.OK)
lblRemainingNumberOfAttempts.Text = ""
lblNumberOfAttempts.Text = ""

1 Ответ

0 голосов
/ 29 октября 2018

Я добавил список, чтобы сохранить угаданные буквы. Другие комментарии и объяснения в строке.

Public Class Form3
    'Move this to a class level variable so it can be seen by
    'all the methods in the class
    Private strSecretWord As String

    Private Sub btnStartGame_Click(sender As Object, e As EventArgs) Handles btnStartGame.Click
        Dim strLetterGuessed As String
        Dim blnDashReplaced As Boolean
        Dim intNumberOfRemainingGuesses As Integer
        Dim intNumofGuesses As Integer = 0

        'Display correct number of dashes
        Dim numberOfDashes As Integer = strSecretWord.Length
        'Create a string with correct number of dashes
        'This uses and overload of the String constructor that takes a Char and an integer
        'as arguments and returns a string with that character repeated that number
        'of times. The lower case c following "-" indicates that - is a Char.
        Dim TotalNumofGuesses = numberOfDashes * 2
        lblRemainingNumberOfAttempts.Text = TotalNumofGuesses.ToString
        intNumberOfRemainingGuesses = TotalNumofGuesses
        Dim dashString As String = New String("-"c, numberOfDashes)
        'displays the dashes
        lblSecretWord.Text = dashString

        'guessing player recieves inputbox to make letter guesses 
        'You can use an Interpolated string to display variables in line surrounded by { }.
        'In older versions of VB String.Format() will yield the same result.
        MessageBox.Show($"The length of the word is {numberOfDashes} letters, you will be given {TotalNumofGuesses} guesses", $"{TotalNumofGuesses} guesses", MessageBoxButtons.OK)
        MessageBox.Show("Player who gets to guess, BE READY!", "Good Luck Guessing", MessageBoxButtons.OK)

        'Counts number of attempts player gets and replaces dashes with guessed letter if correct
        'If guessed letter was incorrect, user loses a turn
        For counter = 1 To TotalNumofGuesses
            strLetterGuessed = InputBox("Please guess a letter:", "Letter Guess").ToUpper
            'If lstLettersGuessed.Contains(strLetterGuessed) Then
            If lbxLettersGuessed.Items.Contains(strLetterGuessed) Then
                MessageBox.Show($"{strLetterGuessed} has already been guessed.", "Try Again")
                'need to do this so they are not cheated out of a guess
                TotalNumofGuesses += 1
                Continue For 'Moves to the next iteration of the For
            End If
            lbxLettersGuessed.Items.Add(strLetterGuessed)
            'lstLettersGuessed.Add(strLetterGuessed)
            'Uses an IntIndex counter of 0 to 4 to execute 5 times (5 dashes)
            'Also uses the value of intIndex to check each of the 5 locations of the strSecretWord
            For intIndex As Integer = 0 To numberOfDashes - 1
                'if the user has guessed a correct letter then remove a dash and insert the correct letter guessed
                If strSecretWord.Substring(intIndex, 1) = strLetterGuessed Then
                    lblSecretWord.Text = lblSecretWord.Text.Remove(intIndex, 1)
                    lblSecretWord.Text = lblSecretWord.Text.Insert(intIndex, strLetterGuessed)
                    blnDashReplaced = True
                End If
            Next intIndex

            'If the user guessed a correct letter on their last guess the blnDashReplaced is set and the true condition of the If statement is executed
            If blnDashReplaced = True Then
                'if there are no more dashes, and the game has been solved.
                If lblSecretWord.Text.Contains("-") = False Then
                    MessageBox.Show("Great Job playing Hangman!", "Game Over", MessageBoxButtons.OK)
                    'Do this at start of game, player wants to see final score
                    'lblRemainingNumberOfAttempts.Text = ""
                    'lblNumberOfAttempts.Text = ""
                    Exit Sub
                Else
                    blnDashReplaced = False
                End If
            End If
            'This is a shorter way of incrementing a variable
            intNumofGuesses += 1
            'Can't put an integer into a Text property, it needs a string
            lblNumberOfAttempts.Text = intNumofGuesses.ToString
            'This is a shorter way of decrementing a variable
            intNumberOfRemainingGuesses -= 1
            'Can't put an integer into a Text property, it needs a string
            lblRemainingNumberOfAttempts.Text = intNumberOfRemainingGuesses.ToString

        Next
        lblSecretWord.Text = "GAME OVER!"
        MessageBox.Show("Better luck next time. Sorry the correct word was " & strSecretWord & ".", "You Lost", MessageBoxButtons.OK)
        'Do this at start of game
        'lblRemainingNumberOfAttempts.Text = ""
        'lblNumberOfAttempts.Text = ""
    End Sub

    Private Sub btnSetUp_Click(sender As Object, e As EventArgs) Handles btnSetUp.Click
        lblSecretWord.Text = ""
        lblNumberOfAttempts.Text = "0"
        lblRemainingNumberOfAttempts.Text = "0"
        lbxLettersGuessed.Items.Clear()
        'start game and have 1st user input a 5 letter word that 2nd player needs to guess
        strSecretWord = InputBox("Please input a word for user to guess:", "Please input secret word.").ToUpper
    End Sub
End Class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...