2014-05-15 3 views
0

Random.Next 메서드를 사용하려고 할 때마다 1 개의 무작위 변수를 선택하고 매번 그 값을 반환합니다. 이 클래스의 좌표에 사용할 두 개의 임의의 정수를 생성하려고하므로 각 좌표가 각각 Enemy 개의 개체를 만들 수 있습니다.System.Random 클래스를 올바르게 사용하는 방법은 무엇입니까?

Public Class Enemy 
    Dim _name As String 
    Public Property name() As String ... 

    Dim _start_point() As Integer 
    Public Property start_point() As Integer() 
     Get 
      Return _start_point 
     End Get 
     Set(ByVal value As Integer()) 
      _start_point = value 
     End Set 
    End Property 

    Dim _length As Integer 
    Public Property length As Integer ... 

    Dim _space_filled(,) As Integer 
    Public Property space_filled As Integer(,) ... 


    Dim gen_x As New Random() 
    Dim gen_y As New Random() 


    Public Sub New(ByVal namep As String, ByVal lengthp As Integer) 
     name = namep 
     length = lengthp 

     ReDim _start_point(2) 

     GenerateStartPoint() 
     Debug.Print(name & " start point: {" & start_point(0) & ", " & start_point(1) & "}") 
    End Sub 

    Public Sub GenerateStartPoint() 
     start_point = {gen_x.Next(0, 10), gen_y.Next(0, 10)} 
    End Sub 
End Class 
+4

* 공유 *로 지정하십시오. 당신은 오직 하나만 필요합니다. –

+0

감사! 그게 왜 효과가 있었는지 설명해 주시겠습니까? 편집 : 신경 쓰지 마, 나는 그것을 얻을 것 같아요. – alexanderd5398

답변

0

새로운 Random() 인스턴스를 구현 한 다음 Random()을 호출해야합니다. 별도의 변수가 필요할 때마다 Next()를 호출해야합니다. Random()은 CPU 시간에서 시드를 파생하므로 거의 동시에 2를 인스턴스화하면 동일한 시드에서 생성됩니다.

+0

그렇다면 두 개의 새로운 인스턴스를 무작위로 만들어 좌표를 만들면 같은 시간에 인스턴스화 된 이후 동일한 숫자가됩니다. – alexanderd5398

+1

정확히 1을 필요로하고 그냥 .Next()라고 부르면 매 번 새로운 번호가 생깁니다. 랜덤이 만들어지면 시드 값을 기준으로 사용할 임의 값 집합을 만듭니다. seed 값은 CPU 시간의 일부를 기반으로하므로 같은 시간에 만들어지면 동일한 시드가 있으므로 동일한 숫자 컬렉션을 갖습니다. – Derek

+0

굉장한 감사합니다! – alexanderd5398

관련 문제