2016-01-14 3 views
0

Я пытаюсь получить генератор случайных изображений для карты. Я пытаюсь использовать массив для создания пяти разных изображений для 5 ящиков. В настоящее время я использую операторы if, но хочу использовать массивы. Это мой код до сих пор,Как создать случайные изображения в массиве

Dim rndnumber As Integer 

Randomize() 

rndnumber = Int(Rnd() * 52) + 1 
If ListBox1.Items.Contains(rndnumber) Then 
    rndnumber = Int(Rnd() * 52) + 1 
End If 
ListBox1.Items.Add(rndnumber) 

If rndnumber = 1 Then 
    Me.playerhand1.Image = My.Resources.aceclubs 
ElseIf rndnumber = 2 Then 
    Me.playerhand1.Image = My.Resources.acediamonds 
ElseIf rndnumber = 3 Then 
    Me.playerhand1.Image = My.Resources.acehearts 
ElseIf rndnumber = 4 Then 
    Me.playerhand1.Image = My.Resources.acespades 
ElseIf rndnumber = 5 Then 
    Me.playerhand1.Image = My.Resources._2clubs 
ElseIf rndnumber = 6 Then 
    Me.playerhand1.Image = My.Resources._2diamonds 
ElseIf rndnumber = 7 Then 
    Me.playerhand1.Image = My.Resources._2hearts 
ElseIf rndnumber = 8 Then 
    Me.playerhand1.Image = My.Resources._2spades 
ElseIf rndnumber = 9 Then 
    Me.playerhand1.Image = My.Resources._3clubs 
ElseIf rndnumber = 10 Then 
    Me.playerhand1.Image = My.Resources._3diamonds 
ElseIf rndnumber = 11 Then 
    Me.playerhand1.Image = My.Resources._3hearts 
ElseIf rndnumber = 12 Then 
    Me.playerhand1.Image = My.Resources._3spades 
ElseIf rndnumber = 13 Then 
    Me.playerhand1.Image = My.Resources._4clubs 
ElseIf rndnumber = 14 Then 
    Me.playerhand1.Image = My.Resources._4diamonds 
ElseIf rndnumber = 15 Then 
    Me.playerhand1.Image = My.Resources._4hearts 
ElseIf rndnumber = 16 Then 
    Me.playerhand1.Image = My.Resources._4spades 
ElseIf rndnumber = 17 Then 
    Me.playerhand1.Image = My.Resources._5clubs 
ElseIf rndnumber = 18 Then 
    Me.playerhand1.Image = My.Resources._5diamonds 
ElseIf rndnumber = 19 Then 
    Me.playerhand1.Image = My.Resources._5hearts 
ElseIf rndnumber = 20 Then 
    Me.playerhand1.Image = My.Resources._5spades 
End If 
End Sub 
+0

Какой проблемы вы сталкиваетесь, когда вы делаете это? И это, как вы заметили, гораздо лучше использовать массив или словарь, чтобы избавиться от ваших множественных операторов if-else – Ian

+0

, проблема в том, что мне бы хотелось, чтобы в 5 разных картинных ящиках появилось другое изображение. пока что весь этот код предназначен только для одного окна. –

+0

[Этот ответ] (http://stackoverflow.com/a/26532939/1070452) может представлять интерес, поскольку было бы легче читать изображения из ImageList, которые вы могли бы ссылаться на них с помощью ключа, созданного из костюма, и ранга – Plutonix

ответ

0

Придерживаться вашего генератора случайных чисел, то, как это будет делать:

Dim rndnumber As Integer 
Randomize() 
Dim rndNumberList As New List(Of Integer) 
Do 
    rndnumber = Int(Rnd() * 52) + 1 
    If Not rndNumberList.Contains(rndnumber) Then 
     rndNumberList.Add(rndnumber) 
    End If 
Loop Until rndNumberList.Count >= 5 'Basically you loop until you find 5 unique number 

В принципе вы цикла до тех пор, пока не найдете 5 уникальных номеров

Но лучше все-таки я думаю, состоит в том, чтобы составить список, который состоит из числа 1-52, и каждый раз, когда вы выполняете цикл, вы берете этот элемент из списка, делая его только имеющим -1 (например, от 52 до 51) элемента. Затем повторите процесс от 1 до количества оставшихся карт (-1 из предыдущей попытки). Таким образом, вы гарантируете, что вы никогда не будете повторять два одинаковых числа (вы выберете только один номер один раз).

Side Примечание: может быть, вы хотите начать свой индекс от 0 тоже (заканчивается в 51), так как в VB.Net начала индекса от 0

+0

только для того, чтобы убедиться, будет ли это работать с 5 различными коробками изображений. если да, как я могу заставить его работать с 5 различными ящиками. –

+0

@ k.low Да, потому что то, что он делает, просто получает 5 случайных чисел и помещает их в список. Вам решать, что делать с числами в списке. Например, из 5 номеров в списке вы можете использовать свой массив/словарь для будущего (в настоящее время, если-else), вы можете сначала получить 5 изображений, которые вы хотите поместить в свои 5 ящиков. Затем вы используете для цикла, чтобы поместить 5 изображений, каждое изображение в 1 pictureBox или просто поместить их с 5 инструкциями, так как их всего пять. Но вы получаете идею ... – Ian

+0

Хорошо, только один последний вопрос, как бы я упомянул 5 номеров отдельно для ящиков с картинками. –

Смежные вопросы