我写过一个,不过找不到了,应该一小时可以完成(你自己做把: 当个训练).
给你个思路: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?
给你个思路: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?
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;
}
}
洗牌,然后随便按顺序发就行了.
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";
}
洗牌就是随机处理,你那个方法是正确的。如果你要用图形显示出来,需要54个picturebox,用数组把名字存下来。这个数组在洗牌时和牌同步处理。
你的那个card类不太合用,具体类结构要如何处理,还要看你做哪种纸牌游戏。