visual basic hashtable图像键/值

时间:2013-08-28 23:02:39

标签: .net vb.net hashtable

我想用这个问题实现的目的是获取从特定 EnemyName 的字符串数组生成的随机名称,以选择与 eneImage.key 对应的然后将值返回到一个字符串(如果可能的话),然后发送请求信息的表单。

我将为感兴趣的人发布整个代码Whole code, pastebin

所以我有一个如下所示的哈希表:

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循环哈希表的每个循环:

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

1 个答案:

答案 0 :(得分:0)

我认为你想要的是一个Enum of Enemies,它允许你将随机数翻译成敌人的名字。然后使用字典将允许您将图像存储为图像而不是对象:

Enum Enemies
    werewolf = 1
    orc = 2
    salamander = 3
    troll = 4
    cavetroll = 5
    dragon = 6
    vampire = 7
End Enum
Private eneImage As New Dictionary(Of String, Image)
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)
    Dim rnd1 As New Random(DateTime.Now.Millisecond)
    Dim enemyname As String = [Enum].GetName(GetType(Enemies), rnd1.Next(1, 7))
End Sub