本文实现了模拟扑克牌发牌,首先定义一个用户类,来抽象用户,在定义纸牌类,最后实现发牌。用到了随机函数和堆栈。
1. User 类:玩家.
public class User{private List<PaperCard> listCard = new List<PaperCard>();public string Name { get; set; }public User(string strName){this.Name = strName;}public void Add(PaperCard p){listCard.Add(p);}public void Reset(){listCard.Clear();}public void Introduce(){string strCards = "";for (int i = 0; i < listCard.Count; i++){if (i == 0){strCards += listCard[i].Name;}else{strCards += ", " + listCard[i].Name;}}Console.WriteLine("\r\n--------------------------------------------");Console.Write("我是{0},", Name);Console.Write("我手中的扑克牌有{0}张:\r\n{1}\r\n", listCard.Count,strCards);}}
2. PaperCard类:纸牌
public class PaperCard{public string Type { get; set; }public string Number { get; set; }public PaperCard(string strType, string strNumber){this.Type = strType;this.Number = strNumber;}public string Name{get{return string.Format("{0}{1}", this.Type, this.Number);}private set { }}}
3. 模拟发牌过程
public void TestPlay(){//产生扑克牌Console.WriteLine("正在生成扑克牌...");List<PaperCard> myCards = new List<PaperCard>();string[] strType = { "红桃", "黑桃", "梅花", "方块" };string[] strNumber = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" };PaperCard[] OtherCard = { new PaperCard("大王", ""), new PaperCard("小王", "") };for (int i = 0; i < strNumber.Length; i++){for (int j = 0; j < strType.Length; j++){PaperCard p = new PaperCard(strType[j], strNumber[i]);myCards.Add(p);}}for (int j = 0; j < OtherCard.Length; j++){myCards.Add(OtherCard[j]);}//洗牌Console.WriteLine("正在洗牌...");Stack<PaperCard> stackCard = new Stack<PaperCard>();Random r = new Random();while (myCards.Count>0){int iIndex = r.Next(0, myCards.Count);stackCard.Push(myCards[iIndex]);myCards.RemoveAt(iIndex);}//发牌Console.WriteLine("开始发牌...");List<User> listUser = new List<User>() {new User("大师兄"),new User("二师兄"),new User("三师弟")};while (stackCard.Count > 0){for (int s = 0; s < listUser.Count; s++){listUser[s].Add(stackCard.Pop());}}Console.WriteLine("发牌完成!");//看牌foreach (var item in listUser){item.Introduce();}}
测试:
