2

Visual Basicは初めてで、vb.netを使用してコンソール/テキストベースのゲームを作成しています。ゲームをもう少し「スマート」にしたいと思います。私がこれをしなければならなかった考えは、yesの同義語の配列とnoの同義語の配列、およびoverwordsの同様の配列を作成することです。配列で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"

誰かが私を助けることができればそれは非常にありがたいです:)どうもありがとうございました!

4

2 に答える 2

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

辞書の検索時間は最も速くなります。

于 2012-10-13T00:27:13.970 に答える
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
于 2012-10-13T00:28:04.637 に答える