2014-11-07 3 views
0

У меня возникают проблемы с функцией, которая генерирует случайные числа.генератор случайных чисел не работает

У меня есть класс кости:

Public Class dice 
    Private isHold As Boolean = False 
    Private rnd As Random 
    Private rolledDots As Integer 

    Public Sub roll() 

     If isHold = False Then 
      rnd = New Random 
      rolledDots = rnd.Next(1, 7) 
     End If 
    End Sub 

End Class 

Я прокатные через класс кубики rollcup:

Public Class rollCup 
    Public dices As New List(Of dice) 
    Sub New() 
     For i = 0 To 5 
      dices.Add(New dice) 
     Next 
    End Sub 
    Public Sub rollDices() 
     For Each dice In dices 
      dice.roll() 
     Next 
    End Sub 
End Class 

Проблема зернь Арент генерации случайных чисел. Каждый кубик сгенерировал такое же число. я могу достичь только случайных чисел от многопоточности сна в цикле:

Public Sub roll() 
    If isHold = False Then 
     rnd = New Random 
     System.Threading.Thread.Sleep(50) 
     rolledDots = rnd.Next(1, 7) 
    End If 
End Sub 

или показывая каждый номер в окне сообщения:

Public Sub roll() 
    If isHold = False Then 
     rnd = New Random 
     rolledDots = rnd.Next(1, 7) 
     MessageBox.Show(rolledDots) 
    End If 
End Sub 

есть ли другой ответ на мою проблему? пс. Извините за плохой английский.

+0

'MessageBox' ужасный способ для отладки такого рода проблемы – Plutonix

ответ

1

Вот ваш класс в кости с несколькими изменениями. Попробуйте. Проблема заключалась в том, что вы создавали новое случайное число в последовательности, которая приводила к тому, что числа, возвращаемые всем, были одинаковыми.

Public Class dice 
    Private isHold As Boolean = False 
    Private Shared rnd As New Random '<<<< note Shared 
    Private rolledDots As Integer 

    Public Sub roll() 
     If Not Me.isHold Then 
      Me.rolledDots = dice.rnd.Next(1, 7) 
     End If 
    End Sub 

End Class 

См RandomWrapper

0

Я думаю, ваша проблема в том, что randomgenerator основан на времени, поэтому он создает «случайное» значение, основанное на текущем времени. И поскольку разные кубики работают практически в одно и то же время, вы получите одинаковое случайное число. См.: Why isn't Random() random?

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