一副牌先洗牌 然后发给4个人!
[email protected]

解决方案 »

  1.   

    一副牌52张随机打乱洗牌 然后发牌给4个人(用个FOR循环)每显示13张牌换行 一共显示4行
    第一个类:一张牌(成员包括:点数,花色)第二个类:一副牌(成员包括数组[52] 洗牌方法发牌方法)最后在主程序中输出.
      

  2.   

    我们先来定义一下需要解决的问题
    一、用什么样的变量表示牌面
    二、洗牌
    三、发牌
    一、用什么样的变量表示牌面
        我这里定义1-52的数字表示一副牌所有的牌面,1-52中任意一个数字除以4,商为点数(A-K、A=0、K=12)余数为花色(0=方块、1=梅花、2=红心、3=黑桃)
        这样做法的优点是J=10,10*4=40,40-43就是方块J-黑桃J,我们要判断两张J哪一张花色大直接用>号就可以判断了
      

  3.   

    二、洗牌
        我刚才说错了,数字也要初始化的    // 初始化,poker[0]做为洗牌时的临时变量
        int[] poker = new int[53];    // 赋初值1-52
        for(int i = 1; i < 53; i ++)
        {
            poker[i] = i;
        }    // 声明一个随机数生成变量用当前时间做为种子
        Random rnd = new Random((int)DateTime.Now.Ticks);    int j = 0;
        for(int i = 1; i < 53; i++)
        {
    j = rnd.Next(53-i);
            poker[0]=poker[53-i];
            poker[53-i]=poker[j];
            poker[j]=poker[0];
        }
      

  4.   

    三、发牌
        // 定义一个两维的数组表示4个玩家的牌,也可以定义4个一维的数组,下面赋值的时候就要用switch语句了
        int[,] player = new int[4,13];    for(int i = 0; i < 52; i++)
        {
            int x = i % 4; // 取得余数,表示第几个玩家
            int y = i / 4; // 取得商家,表示发第几轮的牌
            player[x, y] = poker[i + 1];
        }
      

  5.   

    using System;
    using System.Collections.Generic;
    using System.Text;namespace 控制台程序
    {
        class 一张牌
        {
            public byte 花色; // 1..4
            public byte 点数; // 1..13
            public 一张牌(byte 花色, byte 点数)
            {
                this.点数 = 点数;
                this.花色 = 花色;
            }
            public override string ToString()
            {
                string 花色名;
                switch (花色)
                {
                    case 1:
                        花色名 = "黑";
                        break;
                    case 2:
                        花色名 = "红";
                        break;
                    case 3:
                        花色名 = "梅";
                        break;
                    case 4:
                        花色名 = "方";
                        break;
                    default:
                        花色名 = "";
                        break;
                }
                string 点数名;
                switch (点数)
                {
                    case 1:
                        点数名 = "A";
                        break;
                    case 11:
                        点数名 = "J";
                        break;
                    case 12:
                        点数名 = "Q";
                        break;
                    case 13:
                        点数名 = "K";
                        break;
                    default:
                        点数名 = 点数.ToString();
                        break;
                }
                return string.Format("{0}{1}", 花色名, 点数名);
            }
        }
        class 一副牌
        {
            public static List<一张牌> 牌列表 = new List<一张牌>();
            public static Random 随机数 = new Random();
            public 一副牌()
            {
                for (byte i = 1; i <= 4; i++)
                {
                    for (byte j = 1; j <= 13; j++)
                    {
                        牌列表.Add(new 一张牌(i, j));
                    }
                }
            }
            public 一张牌 发牌()
            {
                if (牌列表.Count <= 0) return null;
                一张牌 返回值 = null;
                int i = (int)(牌列表.Count * 随机数.NextDouble());
                返回值 = 牌列表[i];
                牌列表.RemoveAt(i);
                return 返回值;
            }
        }
        class 程序
        {
            static void Main(string[] args)
            {
                一副牌 一副牌实例 = new 一副牌();
                for (int i = 1; i <= 4; i++)
                {
                    Console.Write("{0}:", i);
                    for (int j = 1; j <= 13; j++)
                    {
                        一张牌 一张牌实例 = 一副牌实例.发牌();
                        if (一张牌实例 != null)
                            Console.Write(一张牌实例.ToString());
                    }
                    Console.WriteLine();
                }
                Console.ReadKey();
            }
        }
    }