2016-12-12 2 views
0

私はここで助けを得ることができますか?私は2対の数字を作成するいくつかのコードを持っています。私はそれらを.exceptと比較しています。私が持っている質問は、私のコードに示されているような数字を割り当てるのではなく、どのようにして50個のランダムなスローを比較のために追加するのですか?比較のためのペアリストに乱数を追加する

public FrmDieRoller() 
    { 
     InitializeComponent(); 
    } 

    public class Pair 
    { 
     public int FirstDie { get; set; } 
     public int SecondDie { get; set; } 
    } 

    public class Pair2 
    { 
     public int ThirdDie { get; set; } 
     public int FourthDie { get; set; } 

    } 

    public static List<Pair> ConvertToPairs(int[,] dieValues) 
    { 
     var query = from int item in dieValues select item; 
     var p1Rolls = query.ToList(); 
     List<Pair> pairs = new List<Pair>(p1Rolls.Count); 
     for (int i = 0; i <4 ; i += 2) 
     { 
      pairs.Add(new Pair() {FirstDie = p1Rolls[i], SecondDie = 
      p1Rolls[i+ 1]}); 
     } 
     return pairs; 
    } 

    public static List<Pair2> ConvertToPairs2(int[,] dieValues1) 
    { 
     var query = from int item1 in dieValues1 select item1; 
     var p2Rolls = query.ToList(); 
     List<Pair2> pairs1 = new List<Pair2>(p2Rolls.Count); 
     for (int j = 0; j < 4; j += 2) 
     { 
      pairs1.Add(new Pair2() {ThirdDie = p2Rolls[j], FourthDie = 
      p2Rolls[j + 1]}); 
     } 
     return pairs1; 
    } 

    public void btnRoll_Click(object sender, EventArgs e) 
    { 

     int[,] dieValue1 = {{1,2},{3,4}}; 
     int[,] dieValue2 = {{2,6},{5,1}}; 



     var p1Rolls = ConvertToPairs(dieValue1); 
     var p2Rolls = ConvertToPairs(dieValue2); 

     foreach (var item in p1Rolls.Except(p2Rolls)) 
     { 

     lstRollDifference.Items.Add(string.Format("Player one has [{0}, 

     {1}] which Player two does not", item.FirstDie, item.SecondDie)); 


     } 
+0

あなたのコードは動作しません。 'GetHashCode'と' Equals'をオーバーライドしないオブジェクトに対しては 'Except'を呼び出すことはできません。 – Enigmativity

+0

このコードで試してみると、 'int [、] dieValue1 = {{1,2}、{3,4}};あなたがまだ「あなたのプレイヤーが[3、4]を持っていると言われていることがわかるでしょう。[1、2] 2人は "いない"。 – Enigmativity

+0

私はまだC#の新機能です。gethashcodeについてもう少し説明してください。 –

答えて

0

これは、私は、ランダムなロールを作成する時にどのように見えるかです:

private Random _random = new Random(); 

private int RollDie() 
{ 
    return _random.Next(1, 7); // 7 is the exclusive max value - so real max is 6 
} 

private Pair RollPair() 
{ 
    return new Pair() 
    { 
     FirstDie = this.RollDie(), 
     SecondDie = this.RollDie() 
    }; 
} 

public void btnRoll_Click(object sender, EventArgs e) 
{ 
    List<Pair> p1Rolls = Enumerable.Range(0, 50).Select(n => this.RollPair()).ToList(); 
    List<Pair> p2Rolls = Enumerable.Range(0, 50).Select(n => this.RollPair()).ToList(); 

    foreach (var item in p1Rolls.Except(p2Rolls)) 
    { 
     lstRollDifference.Items.Add(string.Format("Player one has [{0}, {1}] which Player two does not", item.FirstDie, item.SecondDie)); 
    } 
} 
0

あなたはロールを生成するRandomクラスを使用することができ、そしてようPairクラスでそのコードを組み込むための最も簡単なことだろう示す:

class Pair : IEquatable<Pair> 
{ 
    public int FirstDie { get; set; } 
    public int SecondDie { get; set; } 

    public Pair(int d1, int d2) 
    { 
     FirstDie = d1; 
     SecondDie = d2; 
    } 

    public bool Equals(Pair other) 
    { 
     return this.FirstDie.Equals(other.FirstDie) 
      && this.SecondDie.Equals(other.SecondDie); 
    } 

    public override int GetHashCode() 
    { 
     return FirstDie.GetHashCode() 
       ^SecondDie.GetHashCode(); 
    } 

    private static Random r = new Random(); 
    public static Pair RollNewPair() 
    { 
     // The minimum value is inclusive, the maximum value is exclusive 
     return new Pair(r.Next(1, 7), r.Next(1, 7)); 
    } 
} 

(EnigmativityがExcept方法がIEquatable<Pair>とoverridinを実装しなくても正常に動作しません、言ったようにグラムGetHashCode

そして、そのようにそれを使用します。

int numOfRolls = 20; 

List<Pair> playerOneRolls = Enumerable.Range(0, numOfRolls).Select(n => Pair.RollNewPair()).ToList(); 
List<Pair> playerTwoRolls = Enumerable.Range(0, numOfRolls).Select(n => Pair.RollNewPair()).ToList(); 

foreach (var roll in playerOneRolls.Except(playerTwoRolls)) 
{ 
    // do whatever 
} 
関連する問題