我写过一个,不过找不到了,应该一小时可以完成(你自己做把: 当个训练).
给你个思路:CARD[52]初期话
for(int i=0;i<52;i++)card[i]=i;/*假定0~12为红,依此类推*/洗牌:
for(i=0;i<51;i++){
/*从0~51-i中随即选一个数J(即要交换数的下标),和最后一个数(51-i)交换*/
j=?;
temp=card[51-i];
card[51-i]=card[j];
card[j]=temp;
}然后按数组的顺序进行发牌即可Do you see it?

解决方案 »

  1.   

    书上例子刚看到,跟 Iamabigcook() 说得一样.public int[] cards={........}
    public void Shuffle()
    {
    Random random=new Random();
    for(int i=0;i<cards.Count;i++)
    {
    int t=random.Next()%cards.Count;
    object t=cards[i];
    cards[i]=cards[t];
    cards[t]=t;
    }
    }
    洗牌,然后随便按顺序发就行了.
      

  2.   

    如果我建立一个Card类那么下面两个要怎么联系起来?
    public class Card
    {
    private string face;
    private string suit;
    public Card(string faceValue,string suitValue)
    {
    face = faceValue;
    suit = suitValue;
    }
    public override string ToString()
    {
    return face+"of"+suit;
    } }
    和这个public class DeckForm : System.Windows.Forms.Form
    {
    private System.Windows.Forms.Button dealButton;
    private System.Windows.Forms.Button shuffleButton; private System.Windows.Forms.Label displayLabel;
    private System.Windows.Forms.Label statusLabel;
    private System.ComponentModel.Container components = null; private Card[] deck = new Card[52];
    private int currentCard;






    [STAThread]
    static void Main() 
    {
    Application.Run(new deckForm());
    } private void deckForm_Load(object sender, System.EventArgs e)
    {
    string[] face = {"A","2","3","4","5","6","7","8","9","10","J","Q","K",};
    string[] suits = {"Hearts","Diamonds","Clubs","Spades",}; currentCard = -1; for(inti=0;i<deck.Length;i++)
    deck[i] = newCard(faces[i%13],suits[i%4]);

    }
    private void dealButton_Clike(object sender,System.EventArgs e)
    {
    Card dealt = Dealcard(); if(dealt != null)
    {
    displayLabel.Text = dealt.ToString();
    statusLabel.Text = "Card#:"+currentCard;
    }
    else
    {
    displayLabel.Text = "NO MORE CARDS TO DEAL";
    statusLabel.Text = "shuffle cards to continue"; }
    } private void shuffle()
    {
    Random randomNumber = new Random();
    Card temporaryValue; currentCard = -1; for(inti=0;i<deck.Length;i++)
    {
    int j = randomNumber.Next(52); temporaryValue = deck[i];
    deck[i] = deck[j];
    deck[j] = temporaryValue; }
    dealButton.Enabled = true; }
    private Card DealCard()
    {
    if(currentCard+1 < deck.length)
    {
    currentCard++;
    return deck[currentCard]; }
    else
    {
    dealButton.Enabled = flase;
    return null;
    }
    }
    private void shuffleButton_Click(object sender,System.EventArgs e)
    {
    displayLabel.Text = "SHUFFLING...";
    shuffle();
    displayLabel.Text = "DECK IS SHUFFED";
    }


      

  3.   

    思路应该是这样的:1。两个数组。你最好存为0-53,共54个数字。
    洗牌就是随机处理,你那个方法是正确的。如果你要用图形显示出来,需要54个picturebox,用数组把名字存下来。这个数组在洗牌时和牌同步处理。
    你的那个card类不太合用,具体类结构要如何处理,还要看你做哪种纸牌游戏。