2014-07-02 5 views
-1

Я делаю игру для игры в кости с кубиками для моего введения в класс программирования, и мне нужно немного помочь с генераторами случайных чисел. Каждый раз, когда я их использую, они следуют за ними в той же последовательности чисел, что делает каждый поворот галстуком, есть ли способ исправить это?RNG in VB.Net 2010

Module Module1 

    Sub Main() 
     Dim rnumber1 As Random 
     Dim rnumber2 As Random 
     Dim number1 As Integer 
     Dim number2 As Integer 
     Dim user1 As String 
     Dim user2 As String 
     Dim score1 As Integer 
     Dim score2 As Integer 
     rnumber1 = New Random 
     number1 = rnumber1.Next(1, 6) 
     rnumber2 = New Random 
     number2 = rnumber2.Next(1, 6) 
     Console.WriteLine("Welcome to my dice game!") 
     Console.WriteLine("The objective of the game is to roll higher than your opponent.") 
     Console.WriteLine("The first one to 10 points wins!") 
     Console.ReadLine() 
     Console.Clear() 
     Console.WriteLine("First player, please enter your name.") 
     user1 = Console.ReadLine() 
     Console.WriteLine("Thank you, {0}!", user1) 
     Console.ReadLine() 
     Console.Clear() 
     Console.WriteLine("Second player, please enter you name.") 
     user2 = Console.ReadLine() 
     Console.WriteLine("Thank you, {0}!", user2) 
     Console.ReadLine() 
     Console.Clear() 
     Do Until score1 Or score2 = 10 
      rnumber1 = New Random 
      number1 = rnumber1.Next(1, 6) 
      rnumber2 = New Random 
      number2 = rnumber2.Next(1, 6) 
      Console.Clear() 
      Console.WriteLine("The score so far is {0} to {1}!", score1, score2) 
      Console.WriteLine("Press enter to continue...") 
      Console.Clear() 
      Console.WriteLine("{0}, press enter to roll the dice!", user1) 
      Console.ReadLine() 
      Console.WriteLine(number1) 
      Console.ReadLine() 
      Console.WriteLine("{0}, press enter to roll the dice!", user2) 
      Console.ReadLine() 
      Console.WriteLine(number2) 
      Console.ReadLine() 
      If number1 > number2 Then 
       Console.WriteLine("The winner of this round is {0}.", user1) 
       Console.ReadLine() 
       score1 = score1 + 1 
       Console.Clear() 
      ElseIf number2 > number1 Then 
       Console.WriteLine("The winner of this round is {0}.", user2) 
       Console.ReadLine() 
       score2 = score2 + 1 
       Console.Clear() 
      Else : Console.WriteLine("This round was a tie!") 
       Console.ReadLine() 
      End If 
     Loop 

    End Sub 

End Module 
+1

Visual Studio не является языком программирования; это IDE. Поскольку ваш вопрос не в использовании Visual Studio, я удалил этот тег и добавил правильные для VB.Net. Если вы собираетесь учиться программировать, вы должны, по крайней мере, научиться определять язык, который вы собираетесь использовать в первую очередь. :-) –

+2

Создайте и используйте только один экземпляр 'Random', а не два: замените' rnumber2' на 'rnumber1' и не вызывайте' New Random' более одного раза. –

+0

Извините, Кен, я делал это только неделю, так что все это довольно ново и смущает меня! Майкл, в котором номер rnumber2 должен быть заменен номером rnumber1, или вы имели в виду замену всех экземпляров на него? – Jason

ответ

0

Я решил вашу проблему.

Вот код, попробуйте:

Sub Main() 
    Dim rnumber1 As Random 
    Dim rnumber2 As Random 
    Dim number1 As Integer 
    Dim number2 As Integer 
    Dim user1 As String 
    Dim user2 As String 
    Dim score1 As Integer 
    Dim score2 As Integer 
    Console.WriteLine("Welcome to my dice game!") 
    Console.WriteLine("The objective of the game is to roll higher than your opponent.") 
    Console.WriteLine("The first one to 10 points wins!") 
    Console.ReadLine() 
    Console.Clear() 
    Console.WriteLine("First player, please enter your name.") 
    user1 = Console.ReadLine() 
    Console.WriteLine("Thank you, {0}!", user1) 
    Console.ReadLine() 
    Console.Clear() 
    Console.WriteLine("Second player, please enter your name.") 
    user2 = Console.ReadLine() 
    Console.WriteLine("Thank you, {0}!", user2) 
    Console.ReadLine() 
    Console.Clear() 
    Do Until score1 Or score2 = 10 
     rnumber1 = New Random 
     number1 = rnumber1.Next(1, 6) 
     rnumber2 = New Random 
     number2 = rnumber2.Next(1, 6) 
     rnumber2 = rnumber1 
     number2 = rnumber2.Next(1, 6) 
     Console.Clear() 
     Console.WriteLine("The score so far is {0} to {1}!", score1, score2) 
     Console.WriteLine("Press enter to continue...") 
     Console.Clear() 
     Console.WriteLine("{0}, press enter to roll the dice!", user1) 
     Console.ReadLine() 
     Console.WriteLine(number1) 
     Console.ReadLine() 
     Console.WriteLine("{0}, press enter to roll the dice!", user2) 
     Console.ReadLine() 
     Console.WriteLine(number2) 
     Console.ReadLine() 
     If number1 > number2 Then 
      Console.WriteLine("The winner of this round is {0}.", user1) 
      Console.ReadLine() 
      score1 = score1 + 1 
      Console.Clear() 
     ElseIf number2 > number1 Then 
      Console.WriteLine("The winner of this round is {0}.", user2) 
      Console.ReadLine() 
      score2 = score2 + 1 
      Console.Clear() 
     Else : Console.WriteLine("This round was a tie!") 
      Console.ReadLine() 
     End If 
    Loop 
End Sub 

Надежда Этот код был полезным для Вас.

0

Вы должны поместить случайное во время компиляции:

Module Module1 

    Dim rnumber1 As New Random 
    Dim rnumber2 As New Random 

    Sub Main() 

     Dim number1 As Integer 
     Dim number2 As Integer 
     Dim user1 As String 
     Dim user2 As String 
     Dim score1 As Integer 
     Dim score2 As Integer 
     number1 = rnumber1.Next(1, 6) 
     number2 = rnumber2.Next(1, 6) 
     Console.WriteLine("Welcome to my dice game!") 
     Console.WriteLine("The objective of the game is to roll higher than your opponent.") 
     Console.WriteLine("The first one to 10 points wins!") 
     Console.ReadLine() 
     Console.Clear() 
     Console.WriteLine("First player, please enter your name.") 
     user1 = Console.ReadLine() 
     Console.WriteLine("Thank you, {0}!", user1) 
     Console.ReadLine() 
     Console.Clear() 
     Console.WriteLine("Second player, please enter you name.") 
     user2 = Console.ReadLine() 
     Console.WriteLine("Thank you, {0}!", user2) 
     Console.ReadLine() 
     Console.Clear() 
     Do Until score1 Or score2 = 10 
      rnumber1 = New Random 
      number1 = rnumber1.Next(1, 6) 
      rnumber2 = New Random 
      number2 = rnumber2.Next(1, 6) 
      Console.Clear() 
      Console.WriteLine("The score so far is {0} to {1}!", score1, score2) 
      Console.WriteLine("Press enter to continue...") 
      Console.Clear() 
      Console.WriteLine("{0}, press enter to roll the dice!", user1) 
      Console.ReadLine() 
      Console.WriteLine(number1) 
      Console.ReadLine() 
      Console.WriteLine("{0}, press enter to roll the dice!", user2) 
      Console.ReadLine() 
      Console.WriteLine(number2) 
      Console.ReadLine() 
      If number1 > number2 Then 
       Console.WriteLine("The winner of this round is {0}.", user1) 
       Console.ReadLine() 
       score1 = score1 + 1 
       Console.Clear() 
      ElseIf number2 > number1 Then 
       Console.WriteLine("The winner of this round is {0}.", user2) 
       Console.ReadLine() 
       score2 = score2 + 1 
       Console.Clear() 
      Else : Console.WriteLine("This round was a tie!") 
       Console.ReadLine() 
      End If 
     Loop 

    End Sub 

End Module 

Я надеюсь, что это работа. Это потому, что Random использует время в себе.