扑克牌的随机发牌程序

一个扑克牌游戏(准确的说就是“斗地主”),本来是打算取0-53的随机数,取过的就做一个标识,循环直至全部完。但是细想一下,效率实在是太低了,最后决定用乱序的方式,感觉还不错。不知道还有没有更好的办法,请大家多多指教!

using
 System;
using  System.Collections;
namespace  ConsoleApplication11
{
    
///   <summary>
    
///  RandomTEST 的摘要说明。
    
///   </summary>
     public   class  RandomTest
    {        
        
// 0-12表示黑桃A到K;
        
// 13-25表示红桃A到K;
        
// 26-38表示梅花A到K;
        
// 39-51表示方块A到K;
        
// 52表示小鬼,53表示大鬼;
         public   string  man_a;
        
public   string  man_b;
        
public   string  man_c;
        
public   string  remnant;
        
private      int [] array  =   new   int []{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 , 22 , 23 , 24 , 25 , 26 , 27 , 28 , 29 , 30 , 31 , 32 , 33 , 34 , 35 , 36 , 37 , 38 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 51 , 52 , 53 };
        
// 乱序算法
         public   void  Random_Sequence()
        {
            
int  m,n;
            Random ram
= new  Random();
            
for ( int  i = 0 ;i < 1000 ;i ++ )
            {
                m
= ram.Next( 0 , 54 );
                n
= ram.Next( 0 , 54 );
                
if  (m != n)
                {
                    
this .permute(m,n);
                }
            }
        }
        
// 两个数置换
         public   void  permute( int  a, int  b)
        {
            array[a]
= array[a] + array[b];
            array[b]
= array[a] - array[b];
            array[a]
= array[a] - array[b];
        }
        
// 发牌
         public   void  deal_cards()
        {
            
for  ( int  i = 0 ;i < 17 ;i ++ )
            {    
                man_a
= man_a + "   " + array[i * 3 ].ToString();
                man_b
= man_b + "   " + array[i * 3 + 1 ].ToString();
                man_c
= man_c + "   " + array[i * 3 + 2 ].ToString();
            }
            remnant
= array[ 51 ].ToString() + "   " + array[ 52 ].ToString() + "   " + array[ 53 ].ToString();
        }
    }
    
public   class  GameStart
    {
        [STAThread]
        
static   void  Main( string [] args)
        {
            RandomTest rt
=   new  RandomTest();
            rt.Random_Sequence();
            rt.deal_cards();
            Console.WriteLine(
" 玩家甲的牌型: " + rt.man_a.ToString());
            Console.WriteLine(
" 玩家乙的牌型: " + rt.man_b.ToString());
            Console.WriteLine(
" 玩家丙的牌型: " + rt.man_c.ToString());
            Console.WriteLine(
" 剩余的牌型: " + rt.remnant.ToString());
            Console.ReadLine();
        }
    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值