C# 扑克牌游戏

代码

class Program
    {
        static int[] cards = new int[52];  // 存牌数组
        static int times;
        // 生成扑克牌
        public static void initCard()
        {
            
            
            int k = 0;
            // 生成扑克牌并存到牌盒中
            for (int i = 1; i <= 4;i++)
            {
                for (int j = 1;j <= 13;j++)
                {
                    int temp = 100;
                    temp *= i;
                    temp += j;
                    cards[k] = temp;
                    k++;
                }
                // 测试代码
                // Console.WriteLine();
            }

            // 测试代码
            //foreach(int i in cards)
            //{
            //    Console.WriteLine(i+" ");
            //}
            // 测试结果:生成模块通过
        }

        // 洗牌
        public static TimeSpan washCard()
        {
            // 控制数字输入   
            Boolean input = true;
            while (input)
            {
                Console.Write("How many times for card:");
                try
                {
                    times = int.Parse(Console.ReadLine());
                }
                catch (FormatException)
                {
                    Console.WriteLine("请输入正整数!");
                    Console.ReadKey();
                    Console.Clear();
                    washCard();
                }
                if (times <= 0)
                {
                    Console.WriteLine("请输入正整数!");
                }
                else
                {
                    input = false;
                }  
            }

            /*  洗牌算法
             *  目的:将数组中的下标随机打乱
             *  步骤:
             *      1.生成随机数下标r1;
             *      2.生成随机数下标r2;
             *      3.用temp接收r1的值;
             *      4.r1接收r2的值;
             *      5.r2接收temp的值;
             *      完成换值操作
             *  注意事项:
             *      1.两个随机数下标不能相同
             *      2.洗牌一次的意思是更换20张牌的值(初步决定,后期视情况更改)
             */

            // 
            Random rd = new Random();
            int time_temp = times;
            TimeSpan ts1 = new TimeSpan(DateTime.Now.Ticks);
            while (time_temp > 0)
            {
                //洗一次牌
                for (int i = 0; i < 20; i++)
                {
                    int r1 = rd.Next(52);
                    int r2 = rd.Next(52);
                    while (r1 == r2)
                    {
                        r2 = rd.Next(52);
                    }
                    int temp = cards[r1];
                    cards[r1] = cards[r2];
                    cards[r2] = temp;
                }
                time_temp--;
            } 
            TimeSpan ts2 = new TimeSpan(DateTime.Now.Ticks);
            TimeSpan ts = ts2.Subtract(ts1).Duration();         // 时间差
            return ts;
        }

        // 发牌
        public static void emitCard()
        {
            //Console.WriteLine("进入发牌");
            int[] player1 = new int[13];
            int[] player2 = new int[13];
            int[] player3 = new int[13];
            int[] player4 = new int[13];
            // 开始发牌
            int count = 0;
            for (int j = 0;j < 13;j++)
            {
                //Console.WriteLine(i+" ");
                player1[j] = cards[count++];
                player2[j] = cards[count++];
                player3[j] = cards[count++];
                player4[j] = cards[count++];
            }

            //Console.WriteLine("发牌完成");
            // 明牌
            Console.WriteLine("玩家1的牌:");
            foreach (int i in player1)
            {
                string stemp = fiter(i);
                Console.Write(stemp + " " );
            }
            Console.WriteLine();

            Console.WriteLine("玩家2的牌:");
            foreach (int i in player2)
            {
                string stemp = fiter(i);
                Console.Write(stemp + " ");
            }
            Console.WriteLine();

            Console.WriteLine("玩家3的牌:");
            foreach (int i in player3)
            {
                string stemp = fiter(i);
                Console.Write(stemp + " ");
            }
            Console.WriteLine();

            Console.WriteLine("玩家4的牌:");
            foreach (int i in player4)
            {
                string stemp = fiter(i);
                Console.Write(stemp + " ");
            }
            Console.WriteLine();
        }

        // 过滤器
        public static string fiter(int num)
        {
            /* 规则:
             * 判断花色:
             * 大于100小于200为红桃,ASCII码:003
             * 大于200小于300为方块,ASCII码:004
             * 大于300小于400为梅花,ASCII码:005
             * 大于400为黑桃,ASCII码:006
             * 
             * 判断值
             * 1为A
             * 11为J
             * 12为Q
             * 13为K
             *
             * 注意事项:
             *  先判断花色再判断值
             *  用字符串输出
             */

            string cardType = "";
            if (100 < num && num < 200)
            {  
                cardType += "♥";
                num -= 100;
            }else if (200 < num && num < 300)
            {
                cardType += "♦ ";
                num -= 200;
            }
            else if (300 < num && num < 400)
            {
                cardType += "♣";
                num -= 300;
            }
            else if (400 < num)
            {
                cardType += "♠";
                num -= 400;
            }
            // 判断牌值
            if (num == 1)
            {
                cardType += "A";
            }
            else if (num == 11)
            {
                cardType += "J";
            }
            else if (num == 12)
            {
                cardType += "Q";
            }
            else if (num == 13)
            {
                cardType += "K";
            }else
            {
                cardType += num;               
            }
            // 排版
            cardType += " ";
            if(num != 10)
            {
                cardType += " ";
            }
            return cardType;
        }

        static void Main(string[] args)
        {
            Console.OutputEncoding = Encoding.UTF8; // 能够输出花色的关键
            //Console.WriteLine("开始");
            initCard();
            //Console.WriteLine("初始化牌成功,正洗牌");
            TimeSpan ts = washCard();
            Console.WriteLine("洗牌完成\n");
            emitCard();
            Console.WriteLine("\n洗牌"+times+"次用时:"+ts.Milliseconds.ToString()+" 毫秒\n");        
        }
    }

截图
在这里插入图片描述

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值