//file name Suit.Cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch10CardLib
{
public enum Suit
{
Club, //梅花
Diamond, //方块
Heart, //红桃
Spade //黑桃.
}
}
//file name Rank.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch10CardLib
{
public enum Rank //牌的点数.
{
Ace=1,
Deuce,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nice,
Ten,
Jack,
Queen,
King
}
}
//file name Cards.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch10CardLib
{
//Card 表示一张标准的扑克牌,包含4种花色,顺序是A-K
public class Card
{
//修改为公开的字段.
public readonly Suit suit;
public readonly Rank rank;
public Card()
{
}
public Card(Suit newSuit, Rank newRank)
{
suit = newSuit;
rank = newRank;
}
public override string ToString()
{
return "The " + rank + " of " + suit + "s";
}
}
}
//file name Deck.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Ch10CardLib
{
public class Deck
{
private Card[] cards;
public Deck()
{
cards=new Card[52];
for(int suitval=0;suitval<4;suitval++)
{
for(int rankVal=1;rankVal<14;rankVal++)
{
cards[suitval*13+rankVal-1]=new Card((Suit)suitval,(Rank)rankVal);
}
}
}
public Card GetCard(int cardNum)
{
if(cardNum>=0&&cardNum<=51)
{
return cards[cardNum];
}
else
{
throw (new System.ArgumentOutOfRangeException("cardNum",cardNum,
"Value must be between 0 and 51."));
}
}
public void Shuffle()
{
Card[] newDeck = new Card[52];
bool[] assigned = new bool[52];
Random sourceGen = new Random();
for (int i = 0; i < 52; i++)
{
int destCard = 0;
bool foundcard = false;
while (foundcard == false)
{
destCard = sourceGen.Next(52);
if (assigned[destCard] == false)
foundcard = true;
}
newDeck[destCard] = cards[i];
assigned[destCard] = true;
}
newDeck.CopyTo(cards, 0);
}
}//end deck.
}
// CopyTo摘要:
// 将当前一维 System.Array 的所有元素复制到指定的一维 System.Array 中(从指定的目标 System.Array 索引开始)。索引指定为
// 32 位整数。
//
// 参数:
// array:
// 一维 System.Array,它是从当前 System.Array 复制的元素的目标位置。
//
// index:
// 一个 32 位整数,它表示 array 中复制开始处的索引。
//file name Ch10CardClient.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ch10CardLib;
namespace Ch10CardClient
{
class Program
{
static void Main(string[] args)
{
Deck myDeck = new Deck();
Card[] cards;
int numSuit=0;
int icount=0;
cards = new Card[5];
// while (true)
// {
myDeck.Shuffle();
icount = 0;
for (int i = 0; i < 5; i++)
{
cards[i] = myDeck.GetCard(i);
}
for (int i = 0; i < 5; i++)
{
if (cards[0].suit == cards[i].suit)
{
icount++;
}
}
// if (icount == 5)
// break;
// }
if (icount == 5)
{
Console.WriteLine("Flush .\n ");
for (int i = 0; i < 5; i++)
{
Console.WriteLine( cards[i].ToString());
}
}
else
{
Console.WriteLine("No flush .\n");
for (int i = 0; i < 50; i++)
{
Console.WriteLine(myDeck.GetCard(i));
}
}
// Console.ReadKey();
}
}
}
Ps:可以修改程序,得出5张牌为同花顺要循环多少次.