2015-09-17 27 views
0

我正在嘗試爲遊戲生成方程。如何使用帶參數的構造函數初始化對象數組?

我創建了一個類等式中每學期:

[System.Serializable] 
public class EquationTerm 
{ 
    public int Value { get; set; }  //random int between 1 and 9 
    public int Sign { get; set; }  //1 for +, 2 for -, 3 for *, 4 for/
    public bool IsNextTerm { get; set; } 

    //default positive equationTerm 
    public EquationTerm(int value) 
    { 
     Value = value; 
     Sign = 1; 
     IsNextTerm = false; 
    } 

    public EquationTerm(int value, int sign, bool nextTerm) 
    { 
     Value = value; 
     Sign = sign; 
     IsNextTerm = nextTerm; 
    } 
} 

然後,我創建兩個數組,以保持等式的左側和右側。我想使用一個InitializeArray函數來使用我的構造函數來生成這兩個數組,除了我不能使用它們,因爲它們都有參數。 有沒有辦法解決這個問題?

public class EquationGenerator : MonoBehaviour 
{ 
    EquationTerm[] LeftTerms; 
    EquationTerm[] RightTerms; 

    void Start() 
    { 
     //Initialize both side with a random number of terms 
     LeftTerms = InitializeArray<EquationTerm>(Random.Range (1, 6)); 
     RightTerms = InitializeArray<EquationTerm>(Random.Range (1, 6)); 
    } 

    EquationTerm[] InitializeArray<EquationTerm>(int length) where EquationTerm : new() 
    { 
     EquationTerm[] array = new EquationTerm[length]; 
     array [0] = new EquationTerm (Random.Range (1, 10)); 
     for (int i = 1; i < length; ++i) 
     { 
      array[i] = new EquationTerm (Random.Range (1, 10), Random.Range (1, 5), true); 
     } 

     return array; 
    } 

我在其他崗位,我可以用Activator.CreateInstance看到,所以我試着寫

array[0] = (EquationTerm)Activator.CreateInstance(typeof(EquationTerm), new object[] { EquationTerm (Random.Range (1, 10)) }); 

,但它告訴我,激活不存在。

+0

請告訴我Random.Range?是否你想創建一個Random類的對象並調用.Next(minvalue,maxvalue)? – singsuyash

+0

此外,爲什麼它是一個通用的方法,當它所期望的是方程式? – singsuyash

+0

我正在使用Random.Range來獲得一個隨機的int。例如,InitializeArray (Random.Range(1,6));應該給我一個1到5個EquationTerm對象的數組。我不確定要理解你的第二個問題嗎? – phlipe

回答

0

你爲什麼不嘗試一個非通用版本:

public class EquationGenerator 
     { 
      EquationTerm[] LeftTerms; 
      EquationTerm[] RightTerms; 

      void Start() 
      { 
       //Initialize both side with a random number of terms 
       LeftTerms = InitializeArray(Random.Range(1, 6)); 
       RightTerms = InitializeArray(Random.Range(1, 6)); 
      } 

      EquationTerm[] InitializeArray(int length) 
      { 

       EquationTerm[] array = new EquationTerm[length]; 
       array[0] = new EquationTerm(Random.Range(1, 10)); 
       for (int i = 1; i < length; ++i) 
       { 
        array[i] = new EquationTerm(Random.Range(1, 10), Random.Range(1, 5), true); 
       } 

       return array; 
      } 
     } 
+0

請使用UnityEngine中的Random.Range。 – singsuyash

+0

它完美的作品,謝謝! – phlipe

+0

正如你所說,只需要改變'新Random()。Next(1,10)'與:'Random.Range(1,10)' – phlipe

相關問題