洗牌发牌的算法

19 篇文章 0 订阅

/* ***********************************************
 * author :  Administrator
 * email  :  obruch.com
 * 说明:
 * createtime:  created by Administrator 3/16/2009 11:08:43 AM
 * ***********************************************/
using System;
using System.Collections.Generic;
using System.Text;

namespace Cowge.Game
{
    /// <summary>
    /// 洗牌,发牌 说明:用3位数表示一个牌,共52张,鬼不算  如 101,101..
    /// 201,202.. 301,302..401,402
    /// 其中百位数的代表牌类型  1 红桃 2 方块 3 梅花 4 黑桃
    /// 其余两位数表示牌号 如 101代表红桃1 201表示方块1 303代表梅花3
    /// 下面是实现的代码
    /// </summary>
    public class game
    {

        static void Main()
        {
            //初始化 生成牌
            int[] Pai=new int[52];
            for (int i = 0; i <4; i++)
            {
                for (int j = 0; j <13; j++)
                {

                    Pai[i*13+j] = ((i+1)*100) + j+1;
                }
            }

            Console.Write("请输入洗牌次数:");

            int times = Convert.ToInt32(Console.ReadLine());
            Random rnd = new Random();
            int k;
            int temp;
          
            ///洗牌
            for (int num = 0; num < times; num++)
            {
                for (int i = 0; i < 52; i++)
                {
                    k = rnd.Next(51 - i + 1) + i;
                    temp = Pai[k];
                    Pai[k] = Pai[i];
                    Pai[i] = temp;
                   
                }
              
            }

            ///存放四个玩家的牌
            int[,] Play = new int[4,13];
            int index=0;
         
            ///发牌
            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 13; j++)
                {
                    Play[i, j] = Pai[index++];
                }
            }


         
            int PaiType;
            int PaiHao;
            string s=string.Empty;
            ///开牌
           for (int i = 0; i < 4; i++)
            {
              
                Console.WriteLine("玩家 {0} 的牌:",i+1);
                for (int j = 0; j < 13; j++)
                {
                    ///分离出牌的类
                    PaiType = Play[i, j] / 100;
                    switch (PaiType)
                    {
                        case 1:
                            s = Convert.ToString("/x0003");///"红桃"
                            break;
                        case 2:
                            s = Convert.ToString("/x0004");///"方块";
                            break;
                        case 3:
                            s = Convert.ToString("/x0005");///"梅花";
                            break;
                        case 4:
                            s = Convert.ToString("/x0006");///"黑桃";
                            break;
                    }

                    ///牌号
                    PaiHao = Play[i, j] % 100;

                    Console.Write(s+ " "+ PaiHao.ToString() + " ");
                   
              

                }
                Console.WriteLine();
              
             

            }      

            Console.ReadLine();


        }
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值