2015-10-19 91 views
0

我對學校的分配(Assignment Here)C#洗牌Windows窗體

目前我想洗牌的一副牌的工作。我已經使用PlayingCards從Codeplex上(對不起,只能有兩個環節.. 。)創建的卡的集合創建甲板請幫幫忙,當我點擊隨機播放按鈕,沒有任何反應,您可以在這裏看到我的進步更容易看到整個代碼:。Github

public void Shuffle() 
{ 
    PlayingCards.Deck theDeck = new PlayingCards.Deck(); 

    random = new Random(); 

    for (int i = 0; i < theDeck.Cards.Count; i++) 
    { 
     int second = random.Next(NUMBER_OF_CARDS); 
     PlayingCards.Card temp = theDeck.Cards[i]; 
     theDeck.Cards[i] = theDeck.Cards[second]; 
     theDeck.Cards[second] = temp; 
    } 
} 
+0

theDeck.Cards.Count似乎也值爲0,所以,迭代是不會發生.. –

+0

你是對的,當我調試我也看到,它等於零。但是,我認爲要遍歷列表中的內容,您必須使用.Count。這是我第一次嘗試循環列表的內容,你有什麼建議?當我嘗試52時,它說「超出界限」。 –

+0

@MadelineSchimenti - 我在http://playingcards.codeplex.com/上看了一下'Deck'的源代碼,並且該類沒有用實際的卡片初始化卡片列表 - 它是空的。這就是計數爲零的原因。 – Enigmativity

回答

1

你是創建PlayingCards.Deck的新實例,對其進行洗牌,然後在洗牌結束時將其丟棄。

PlayingCards.Deck theDeck = new PlayingCards.Deck(); 

您需要更改調用Shuffle包括PlayingCards.Deck作爲參數,所以你應該這樣做:

public void Shuffle(PlayingCards.Deck theDeck) 
{ 
    random = new Random(); 

    for (int i = 0; i < theDeck.Cards.Count; i++) 
    { 
     int second = random.Next(NUMBER_OF_CARDS); 
     PlayingCards.Card 
      temp = theDeck.Cards[i]; 
     theDeck.Cards[i] = theDeck.Cards[second]; 
     theDeck.Cards[second] = temp; 
    } 
} 

你也應該移動new Random()超出這個方法,你可能會發現如果你試圖創建兩個洗牌甲板,他們會有相同的順序,因爲種子Random使用基於系統時鐘。

我看了一下你將代碼添加到卡片上的代碼。你應該使用這個代碼:

foreach (var face in Enum.GetValues(typeof(PlayingCards.CardSuits)).Cast<PlayingCards.CardSuits>()) 
{ 
    foreach (var value in Enum.GetValues(typeof(PlayingCards.CardValues)).Cast<PlayingCards.CardValues>()) 
    { 
     theDeck.Cards.Add(new PlayingCards.Card(face, value)); 
    } 
} 
+0

謝謝你的迴應。 Shuffle不在PlayingCards.Deck中。 PlayingCards.Deck實際上是http://playingcards.codeplex.com/的參考文件的一部分。 (我們需要在作業中使用它) –

+0

「Shuffle」是什麼類? – Enigmativity

+0

如果你想洗牌現有的牌組,你必須能夠在'Shuffle'中引用它,而不是創建一個新的牌組。 – Enigmativity