Я создаю игру Hangman для школьного проекта, и одно из требований заключается в том, чтобы отображаемое слово отображалось графически. В настоящее время я использую цикл для добавления подчеркивания для каждой буквы и пробела для каждого пространства. Когда пользователь догадывается о письме, мне нужно изменить все символы подчеркивания, которые представляют эту букву в эту букву. Например, если слово «Переполнение стека» было бы _ _ _ _ _ _ _ _ _ _ _ _ _
, и если они догадались o
, это изменится на _ _ _ _ _ O _ _ _ _ _ o _
. Как я могу изменить некоторые буквы/символы в массиве, чтобы позволить мне менять буквы?Как изменить элемент в массиве?
Вот мой код:
Imports System.Runtime.InteropServices
Public Class Hangman
Dim UnderscoresStr() As Char
Dim GuessLength As Integer
Dim GuessedLetter As String
Dim WordLength As Integer
Dim RandomNum As String
Dim Category As String
Dim Word As String
Dim Letters() As String = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
Private Const EM_SETCUEBANNER As Integer = &H1501
<DllImport("user32.dll", CharSet:=CharSet.Auto)>
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As Integer, <MarshalAs(UnmanagedType.LPWStr)> ByVal lParam As String) As Int32
End Function
Private Sub SetCueText(ByVal control As Control, ByVal text As String)
SendMessage(control.Handle, EM_SETCUEBANNER, 0, text)
End Sub
Public Function Random()
Dim r As Random = New Random
RandomNum = r.Next(1, 5)
Return RandomNum
End Function
Public Function Underscores(Length)
Dim WordArr() As Char = Word.ToCharArray()
Dim UnderscoresText As String
For i = 0 To Length - 1
If WordArr(i) = " " Then
UnderscoresText += " "
Else
UnderscoresText += "_"
UnderscoresText += " "
End If
Next
labelWord.Text = UnderscoresText
Dim UnderscoresStr() As Char = UnderscoresText.ToCharArray
Return UnderscoresText
End Function
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
SetCueText(comboboxCategory, "Category...")
SetCueText(textboxGuess, "Enter your guess...")
buttonGuess.Enabled = False
buttonGiveUp.Enabled = False
textboxGuess.Enabled = False
End Sub
Private Sub buttonStart_Click(sender As Object, e As EventArgs) Handles buttonStart.Click
Category = comboboxCategory.Text
Dim Food() As String = {"Burger", "Pizza", "Fish And Chips", "Steak Pie", "Spaghetti"}
Dim Animals() As String = {"Lammergeier", "Portia Spider", "Hagfish", "Demon Stingerfish", "Tapir"}
Dim Movies() As String = {"Mrs Doubtfire", "Jurassic World", "Life Of Pi", "Fast And Furious", "Fury"}
Dim FastFoodRestaurants() As String = {"Burger King", "KFC", "McDonalds", "Five Guys", "Costa"}
Dim ChocolateBars() As String = {"Double Decker", "Mars Bar", "Twix", "Wispa", "Twirl"}
If comboboxCategory.Text = "" Then
MsgBox("Please select a category first!")
Exit Sub
Else
labelGuessesLeft.Text = "Guesses Left: 6"
buttonGuess.Enabled = True
buttonGiveUp.Enabled = True
textboxGuess.Enabled = True
buttonStart.Enabled = False
comboboxCategory.Enabled = False
End If
For i = 0 To 25
listboxLettersLeft.Items.Add(Letters(i))
Next
Select Case Category
Case "Food"
Word = Food(Random())
Case "Animals"
Word = Animals(Random())
Case "Movies"
Word = Movies(Random())
Case "Fast Food Restaurants"
Word = FastFoodRestaurants(Random())
Case "Chocolate Bars"
Word = ChocolateBars(Random())
End Select
MsgBox(Word)
WordLength = Len(Word)
Underscores(WordLength)
End Sub
Private Sub buttonGiveUp_Click(sender As Object, e As EventArgs) Handles buttonGiveUp.Click
pictureboxHangman.Image = My.Resources.hangman_full
End Sub
Private Sub buttonGuess_Click(sender As Object, e As EventArgs) Handles buttonGuess.Click
Dim WordArr() As Char = Word.ToCharArray()
GuessedLetter = textboxGuess.Text
GuessLength = Len(GuessedLetter)
If GuessLength > 1 Then
MsgBox("Please only enter a single letter!", 16, "Error!")
Else
If GuessedLetter Like "[a-z]" Then
If listboxGuessed.Items.Contains(GuessedLetter) Then
MsgBox("Please enter a letter you haven't already guessed!", 16, "Error!")
Else
listboxGuessed.Items.Add(GuessedLetter)
listboxLettersLeft.Items.Remove(GuessedLetter)
For i = 0 To WordLength - 1
If WordArr(i) = GuessedLetter Then
** UnderscoresStr(i) = GuessedLetter **
End If
Next
End If
Else
MsgBox("Please only enter a letter!", 16, "Error!")
End If
End If
End Sub
End Class
Я поставил **
до и после того, как кусок кода, который я пытаюсь использовать для замены символа.
У кого-нибудь есть идеи о том, как я мог это достичь?
Спасибо,
Он выглядит правильно. Ты это пробовал? У вас возникли проблемы или возникли какие-либо ошибки? – RBarryYoung
@RBarryYoung Да, во-первых, я понял, что забыл переопределить текст метки, чтобы иметь значение массива, поэтому я включил 'Dim UnderscoresStrString As String = String.Join (" ", UnderscoresStr) labelWord.Text = UnderscoresStrString' Но теперь ярлык просто отображается как пустое, когда я догадываюсь о письме. Даже подчеркивания не появляются. –