2015-12-16 5 views
1

Я пытаюсь запрограммировать игру Farkle. Он рулон до 6 кубиков одновременно. Я создал класс Die, чтобы удерживать значение матрицы и метод Roll() для свертывания матрицы.Получите случайное число от другого класса (игра в кости)

Игра создаст массив из 6 кубиков и свернет их все сразу, поэтому я не хотел, чтобы класс Die создавал Random() в каждом экземпляре класса или все кости имели бы одинаковые посеянные случайные числа. Поэтому я создал новую функцию Random() в MainForm моего приложения.

Я запутался в правильном способе вызова этого метода Random() из класса Die, не делая вещи общедоступными, которые должны быть частными и еще много чего. Я действительно новичок и хочу, чтобы все было проще, но я хочу делать все правильно.

Я знаю, что лучше всего использовать только одну Random() для всей программы, так как я могу назвать этот отдельный класс?

Класс Die:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Farkle 
{ 
    class Die 
    { 
     // Fields 
     private int _value; 

     // Constructor 
     public Die() 
     { 
      _value = 1; 
     } 

     // Value property 
     public int Value 
     { 
      get { return _value; } 
     } 

     // Rolls the die 
     public void Roll() 
     { 
      _value = MainForm.rand.Next(6) + 1; 
     } 

    } 
} 

Главная форма:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace Farkle 
{ 
    public partial class MainForm : Form 
    { 
     private Random rand = new Random(); // Should this be public? Or static? 

     public MainForm() 
     { 
      InitializeComponent(); 
     } 

     // Create dice array 
     Die[] diceInHand = new Die[6]; 

     // Roll each die 
     private void MainForm_Load(object sender, EventArgs e) 
     { 
      foreach (Die die in diceInHand) 
       die.Roll(); 
     } 
    } 
} 

Спасибо.

+0

Позвольте мне знать, какова будет ожидаемая польза '«использовать только один Random() для всей программы»' –

ответ

1

Вы можете использовать переменную private static в своем классе Die. Класс static будет объявлен один раз для всех экземпляров ваших кубиков в вашем MainForm.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Farkle 
{ 
    class Die 
    { 
     private static Random rand = new Random(); //note this new item 
     // Fields 
     private int _value; 

     // Constructor 
     public Die() 
     { 
      _value = 1; 
     } 

     // Value property 
     public int Value 
     { 
      get { return _value; } 
     } 

     // Rolls the die 
     public void Roll() 
     { 
      _value = rand.Next(6) + 1; //no need to refer to the mainForm 
     } 

    } 
} 
+0

удивительным! Итак, первая созданная Die создаст это Random, которое может использоваться всеми следующими объектами Die? – Erik

+0

@Erik. Я думаю, вы можете найти немного больше о статической переменной. =) – Ian

+0

@Erik https://msdn.microsoft.com/en-us/library/aa691162(v=vs.71).aspx здесь вы идете – Ian

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