0

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

我会将整个代码发布给感兴趣的人整个代码,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 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

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
于 2013-08-29T04:50:42.827 回答