2012-07-29 67 views
-4

嗨,大家好,我需要一些幫助,我想在6個按鈕中隨機分配6個字符串作爲文本而不需要重複。這是我想做一些洗牌和分發它,但不會有重複每個按鈕將保存一個唯一的字符串。如果任何人都可以張貼代碼將是巨大的:)謝謝C#隨機分發字符串而不重複

class Card_Deck 
{ 
    public Random r; 
    public string ReceiveCards() 
    { 
     List<string> cards = new List<string>(); 
     cards.Add("♣ King"); 
     cards.Add("♦ King"); 
     cards.Add("♥ King"); 
     cards.Add("♠ King"); 
     cards.Add("♣ Jack"); 
     cards.Add("♦ Jack"); 

     int index = r.Next(cards.Count); 
     var card = cards[index]; 
     cards.RemoveAt(index); 
     return card; 

    } 
} 

}

這是在主窗體

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     Card_Deck cd = new Card_Deck() { r = new Random(DateTime.Now.Millisecond) }; 

     button1.Text = cd.ReceiveCards(); 
     button2.Text = cd.ReceiveCards(); 
     button3.Text = cd.ReceiveCards(); 
     button4.Text = cd.ReceiveCards(); 
     button5.Text = cd.ReceiveCards(); 
     button6.Text = cd.ReceiveCards(); 
    } 
} 

}

+3

我們不是一個代碼工廠?你有什麼嘗試?你卡在哪裏?我們不能幫助那些不會幫助自己的人。 – zellio 2012-07-29 05:52:27

+0

對不起,我不能保存我的代碼,但現在我已經如此現在可以請你幫我:) – 2012-07-29 06:03:25

回答

0

公共部分Form1類:形式 { 公共Form1中() { 的InitializeComponent(); }

private void button1_Click(object sender, EventArgs e) 
    { 
     label1.Text = Card_Deck.ReceiveCards(); 
    } 

    private void button2_Click(object sender, EventArgs e) 
    { 
     label2.Text = Card_Deck.ReceiveCards(); 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     label3.Text = Card_Deck.ReceiveCards(); 
    } 
    private void button4_Click(object sender, EventArgs e) 
    { 
     label4.Text = Card_Deck.ReceiveCards(); 
    } 
    private void button5_Click(object sender, EventArgs e) 
    { 
     label5.Text = Card_Deck.ReceiveCards(); 
    } 
    private void button6_Click(object sender, EventArgs e) 
    { 
     label6.Text = Card_Deck.ReceiveCards(); 
    } 
    class Card_Deck 
    { 
     public static Random r = new Random(); 
     private static List<string> cards = new List<string>() { "♣ King 1", 
      "♦ King 2", 
      "♥ King 3", 
      "♠ King 4", 
      "♣ Jack 5", 
      "♦ Jack 6" }; 

     public static string ReceiveCards() 
     { 
      if (cards.Count > 0) 
      { 
       int index = r.Next(cards.Count); 
       var card = cards[index]; 
       cards.RemoveAt(index); 
       return card; 
      } 
      else 
      { 
       return ""; 
      } 

     } 
    } 

} 
+0

非常感謝,這也非常有幫助:) – 2012-07-29 18:57:03

0

這樣做的最簡單的方法將在CardDeck類中實現一個shuffle算法。像Fisher-Yates。

你有的問題是,你每次都重新制作數組,然後抓住一個隨機元素。這會造成重複。你的選擇是要麼返回一個整體洗牌數組(更好的一個imo),要麼用一個私有變量來使卡組成爲有狀態的。

public class CardDeck { 

    private List<String> cards; 

    public CardDeck() { 
     cards = { "♣ King", "♦ King", "♥ King", 
        "♠ King", "♣ Jack", "♦ Jack" }.toList<String>(); 
    } 

    public List<String> Shuffle() { 
     // shuffle cards here 

     var rand = new System.Random(); 
     return cards.OrderBy(x => rand.Next()).toList<String>(); 
    } 
} 

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     var deck = new CardDeck(); 
     var shuffledDeck = deck.Shuffle(); 

     buttom1.Text = shuffledDeck.pop(); 
     buttom2.Text = shuffledDeck.pop(); 
     // ... 
    } 
} 
+0

非常感謝你的幫助我正在嘗試做一個紙牌遊戲,所以我需要它。我將製作的遊戲將是一個4人在線遊戲,那麼你可以參考任何書籍在C#網絡? – 2012-07-29 06:41:49