2016-02-09 3 views
0

Я создаю игру 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 

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

У кого-нибудь есть идеи о том, как я мог это достичь?

Спасибо,

+0

Он выглядит правильно. Ты это пробовал? У вас возникли проблемы или возникли какие-либо ошибки? – RBarryYoung

+0

@RBarryYoung Да, во-первых, я понял, что забыл переопределить текст метки, чтобы иметь значение массива, поэтому я включил 'Dim UnderscoresStrString As String = String.Join (" ", UnderscoresStr) labelWord.Text = UnderscoresStrString' Но теперь ярлык просто отображается как пустое, когда я догадываюсь о письме. Даже подчеркивания не появляются. –

ответ

0

Во-первых, вы должны вычислить положение в массиве. Поскольку вы разделяете каждую букву пробелом, каждая буква занимает 2 позиции (пробел + фактическая буква). Кажется, что позиция в вашем коде верна (с использованием for-loop).

Можно изменить букву в массиве так же, как добавлять ее.

ArrayName(5) = "k" 

изменит 6-й (0,1,2,3,4,5) элемент массива на букву k. «5» может быть любым целым числом, в ярости граничных рядов (0 - arraylength - 1). Если вам нужна дополнительная информация о работе с массивами на VB.net, обязательно проверьте MSDN.

Смежные вопросы