using System;
using System.Collections.Generic;
namespace Csharp
{
class Program
{
public enum Suit
{
Club,
Diamond,
Heart,
Spade,
}
public enum Rank
{
Ace = 1,
Deuce,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Ten,
Jack,
Queen,
King,
}
public class Card
{
public readonly Suit suit;
public readonly Rank rank;
public Card(Suit newSuit, Rank newRank)
{
suit = newSuit;
rank = newRank;
}
private Card()
{
}
public override string ToString()
{
return "The " + rank + " of " + suit + "s";
}
}
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)
throw (new System.ArgumentOutOfRangeException("cardNum", cardNum,
"Value must between the 0 and 51"));
return cards[cardNum];
}
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;
while (true)
{
destCard = sourceGen.Next(52);
//if the card have exist, find again
if (assigned[destCard] == false) break;
}
assigned[destCard] = true;
//random put the origin cards to the new cards sequentially
newDeck[destCard] = cards[i];
}
newDeck.CopyTo(cards, 0);
}
}
static void Main(string[] args)
{
Deck deck = new Deck();
deck.shuffle();
for (int i = 0; i < 52; ++i)
{
Card tempCard = deck.GetCard(i);
Console.WriteLine(tempCard.ToString());
}
Console.ReadKey();
}
}
}
一个极简单的扑克类
最新推荐文章于 2019-06-01 11:28:04 发布