0

この質問で達成したいことは、eneImage.key に対応するように選択された特定の EnemyName の文字列の配列から生成されたランダムな名前を取得し、(可能であれば)その値を文字列に戻して、それを送信することです。情報を要求するフォーム。

興味のある人のためにコード全体を投稿しますコード全体、ペーストビン

だから私は以下のようなハッシュテーブルを持っています:

Private eneImage As New Hashtable()

Sub Main()
    eneImage.Add("orc", My.Resources.orc)
    eneImage.Add("troll", My.Resources.troll)
    eneImage.Add("salamander", My.Resources.salamander)
    eneImage.Add("cavetroll", My.Resources.cavetroll)
    eneImage.Add("dragon", My.Resources.dragon)
    eneImage.Add("vampire", My.Resources.vampire)
    eneImage.Add("werewolf", My.Resources.werewolf)
End Sub

そしてfor、ハッシュテーブルを反復処理する for each ループを含む関数があります。

Private eImage As Bitmap

Public Function getEnemyImage() As Bitmap

    For Each de As DictionaryEntry In eneImage
        MsgBox("Key = {0}, Value = {1}", de.Key, de.Value)
    Next de

ランダムに画像を選択し、名前もランダムであるため、現在これを使用していません。

    'For i As Integer = n1 To n2
        'If i = GetRandom(n1, n2) Then
            'eImage = enemyImage(i)
        'End If
    'Next i
    Return eImage
End Function


Public Function getEnemyName() As String
    InitMonsters()
    n1 = LBound(enemyName)
    n2 = UBound(enemyName)

    For i As Integer = n1 To n2
        If i = GetRandom(n1, n2) And Not String.IsNullOrEmpty(enemyName(i)) Then
            eName = enemyName(i)
        End If
    Next i
    Return eName
End Function

以下の回答を使用しましたが、完全に機能します。

Private eName As String
Private eImage As Image
Private eneImage As New Dictionary(Of String, Image)

Private Sub initImages()
    If Not eneImage.ContainsKey("orc") Then
        eneImage.Add("orc", My.Resources.orc)
        eneImage.Add("troll", My.Resources.troll)
        eneImage.Add("salamander", My.Resources.salamander)
        eneImage.Add("cavetroll", My.Resources.cavetroll)
        eneImage.Add("dragon", My.Resources.dragon)
        eneImage.Add("vampire", My.Resources.vampire)
        eneImage.Add("werewolf", My.Resources.werewolf)
    End If
End Sub

Public Function getEnemyName() As String
    eName = [Enum].GetName(GetType(Enemies), GetRandom(1, 7))
    Return eName
End Function

Public Function getEnemyImage()
    initImages()
    For Each de As KeyValuePair(Of String, Image) In eneImage
        Dim m As String = de.Key
        Dim n As String = eName.ToLower
        If m.StartsWith(n) Then
            eImage = de.Value
        End If
    Next de
    Return eImage
End Function
4

1 に答える 1