我是visual basic的新手,并且一直在使用vb.net来创建基于控制台/文本的游戏。我想让我的游戏多一点"聪明"。我必须这样做的想法是为yes创建一个同义词数组,为no创建一个同义词数组,为over words创建类似的数组。我打算在数组中使用case语句来决定用户输入的天气是yes或no的同义词。到目前为止,我没有运气,我想知道这里是否有人知道如何做到这一点,或者我是否咆哮了错误的树。也许我有不同的方法来解决这个问题?
我的选择尝试:
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 :(得分: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
字典的查找时间最快。
答案 1 :(得分: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