2012-10-12 67 views
2

我剛剛接觸visual basic,並且一直使用vb.net創建一個基於控制檯/文本的遊戲。我想讓我的遊戲更「智能」一點。我必須這樣做的想法是爲yes創建一個同義詞數組,並且爲no創建一個同義詞數組,以及用於over words的類似數組。我打算在數組中使用case語句來確定用戶輸入是yes還是no的同義詞。到目前爲止我還沒有運氣,我想知道這裏有沒有人知道如何做,或者我是否在咆哮錯誤的樹。也許我有不同的方式來解決這個問題?visual basic array case語句

我選擇嘗試:

Select Case userInput 
    Case yes(0) To yes(34) 
     Console.WriteLine("you said something like yes, you said {0}", userInput) 

End Select 

我的數組的開始:(有34個同義詞至今)

Dim yes(0 To 34) As String 

yes(0) = "yes" 
yes(1) = "ok" 
yes(2) = "yep" 
yes(3) = "yeah" 

如果有人可以幫助我將非常感激:)謝謝你真是太棒了!

+0

我沒有做過VB在很長一段時間,但我不知道如果變量case語句值去上班。我可能會做一些類似於「if(IsYes(userInput))elseif(IsNo(userInput)),然後只寫一些函數來查看單詞列表。 –

+0

你是怎麼定義'no'的? – codingbiz

+0

Select ... Case語句,表達式1到表達式2,表達式1的值必須小於或等於表達式2的值,如:Case「yes」到「yesss」 – volody

回答

4

您不必爲此使用Select Case。一個簡單的List(Of T).Contains可以做到這一點。然後,您可以繼續將它放入函數中,以便在應用程序中多次調用它。

示例代碼:

Public Enum Answer 
    Yes 
    No 
    Other 
End Enum 

Public Function GetAnswer(answer As String) As Answer 
    Static yesAnswers = New List(Of String)({"yes", "yeah", "yep", "aye"}) 
    Static noAnswers = New List(Of String)({"no", "nope", "nay"}) 

    If yesAnswers.Contains(answer.ToLower()) Then 
     Return Answer.Yes 
    ElseIf noAnswers.Contains(answer.ToLower()) Then 
     Return Answer.No 
    Else 
     Return Answer.Cancel 
    End If 
End Function 
4

我想創建一個翻譯詞典

Dim translations As New Dictionary(Of String, String) 

translations.Add("yes", "yes") 
translations.Add("ok", "yes") 
translations.Add("yep", "yes") 
translations.Add("yeah", "yes") 

translations.Add("no", "no") 
translations.Add("nope", "no") 

有了這些定義,你可以得到標準版本的答案很容易

Dim userInput = "yeah" 
Dim response As String = Nothing 

translations.TryGetValue(userInput, response) 
Select Case response 
    Case "yes" 
     Console.WriteLine("ok") 
    Case "no" 
     Console.WriteLine("cancel") 
    Case Else 
     Console.WriteLine("rubbish!") 
End Select 

字典擁有最快的查找時間。