この質問で達成したいことは、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