• C# -- 模拟扑克牌发牌


    C# -- 模拟扑克牌发牌

    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("
    --------------------------------------------");
            Console.Write("我是{0},", Name);
            Console.Write("我手中的扑克牌有{0}张:
    {1}
    ", listCard.Count,strCards);
        }
    }
    View Code

    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 { }
        }
    }
    View Code

    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();
        }
    }

    测试:

  • 相关阅读:
    MySQL执行计划extra中的using index 和 using where using index 的区别
    Python + Apache Kylin 让数据分析更加简单!
    性能测试解读:Kyligence vs Spark SQL
    greenplum 表在各个节点数据的分布情况
    postgresql drop表后空间不释放
    PostgreSQL 查看表、索引等创建时间
    postgresql Kill掉正在执行的SQL语句
    linux ps命令查看最消耗CPU、内存的进程
    Linux shell
    TPC-H 下载参考
  • 原文地址:https://www.cnblogs.com/ChengWenHao/p/CSharpPaperCard.html
Copyright © 2020-2023  润新知