2016-12-07 29 views
0

對不起,這可能一個愚蠢的問題,我學到在學校C#和有想出了一個骰子滾子計劃。 是我遇到的問題是不是收集總的2個骰子被捲起,然後將其放入教官要我們得到每個編號的數組的死在一對,然後與之比較的第二對模具勞斯萊斯。我設置了捲筒,但我不確定如何將每個模頭的數量都放入陣列。這是我迄今爲止的代碼。沒有在正確的方向尋找答案。增加2個獨立的號碼數組

這裏是我的代碼(FormButton點擊事件處理中):

Random roll = new Random(); 
int [,] dieValue1 = new int[7, 7]; 
int[,] dieValue2 = new int[7, 7]; 
int die1 = 0; 
int die2 = 0; 
int die3 = 0; 
int die4 = 0; 
die1 = roll.Next(6); 
die2 = roll.Next(6); 
die3 = roll.Next(6); 
die4 = roll.Next(6); 
lblDice1.ImageIndex = die1; 
lblDice2.ImageIndex = die2; 
//die roll for the first list 
for (int rollNum = 1; rollNum< 51; rollNum++) 
{ 
    die1 = roll.Next(1, 7); 
    die2 = roll.Next(1, 7); 
    dieValue1[die1, die2] += 1; 
    lstRolls.Items.Add("Roll " + rollNum + " : " + "die 1 is a " + die1 + ", " + "die 2 is a " + die2); 
} 
//die roll for the second list 
for (int rollNum1 = 1; rollNum1< 51; rollNum1++) 
{     
    die3 = roll.Next(1, 7); 
    die4 = roll.Next(1, 7); 
    dieValue2[die3, die4] += 1; 
    lstRolls2.Items.Add("Roll " + rollNum1 + " : " + "die 3 is a " + die3 + ", " + "die 4 is a " + die4); 
} 
for (int r = 1; r < 51; r++) 
{ 
    lstRollDifference.Items.Add("First rolls :" + dieValue1 + " " + "Second rolls :" + dieValue2); 
} 
+1

我很困惑 - 讓您擁有一個正在運行的總的每個數字組合捲起的次數,現在你要跟蹤每個單獨的卷?你是什​​麼意思,將它們翻成一對並與第二次擲骰子進行比較? – EJoshuaS

+0

我跟蹤兩對不同的骰子,每對骰子滾動50次。他想要顯示每一對的數字。我做了2個單獨的列表框。但是現在他說他希望兩對骰子相互比較。我將使用一個IEnumerable.Comparer比較兩個骰子滾動50次.EX。對1 {6,3} {Pair2 1,4}然後我要經過使用通過IEnumerable的每一對和顯示例如對1的50起的作用篩選具有{2,1} 2不哪對。 –

+0

最簡單的視圖是在索引是卷號的情況下使每個數組1維;爲50卷:'INT [] die1Values =新INT [50];','INT [] die2Values =新INT [50];';對於每個輥:'die1Values [rollNum] =(軋製的結果模1)','die2Values [rollNum] =(軋製模2的結果)'。您可以將它們組合成一個2D數組,而不是隱式耦合:'int [,] allDieValues = new int [2,50]';你可以使用這個數據結構:'allDieValues [0] [rollNum] =(die 1 result)','allDieValues [1] [rollNum] =(die 2 result)',其中第一維是骰子數,第二是#的卷。 – Quantic

回答

0

既然你需要保持你的INT數組,您可以將您的INT數組轉換爲類型的對象:

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

然後將您的陣列的每個球員的名單Pair類型是這樣的:

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; 
} 

然後你可以用戶對於player1的roll和player2的roll會有以獲得差異。這裏是你如何爲玩家1做的。我會讓你找出玩家2.我在這個例子程序中有2卷。

class Program 
{ 
    static void Main(string[] args) 
    { 

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



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

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

     Console.WriteLine("Player 1 has [{0}, {1}] which player 2 does not.", item.FirstDie, item.SecondDie); 
     } 

     var result = LoadComment(1, null); 
     Console.ReadKey(); 

    } 

    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; 
    } 
} 

請注意,你可以使用這個Pair結構開始與一位你滾,你將創建這些每個玩家一次。這樣你就不需要你擁有的所有數組了。

+0

謝謝大家的意見,幫助我解決這個問題。我很感謝你對我這樣一個小菜的耐心。我希望有一天,我可以向大家回報你的青睞。 –

-1

商店擲骰子作爲一個新的對象。生成一個存儲一對骰子的DiceRoll類,並具有ToString,Total的功能,並將一個DiceRoll與另一個進行比較。你甚至可以有一個默認的構造函數,它包含你的隨機數發生器,或者是一個構造函數,用於在別處生成的滾動對。將你的DiceRoll對象放入一個列表(這是IEnumerable)。

https://msdn.microsoft.com/en-us/library/ms173154.aspx https://msdn.microsoft.com/en-us/library/system.icomparable.compareto(v=vs.110).aspx