C#实现斗地主洗牌

这是我自己定义的一个关于牌的数据结构.
None.gif      public   class  Poker
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
public Int32 PokerIndex;//这张牌在整副牌中的索引.
InBlock.gif
        public Int32 PokerValue;//这张牌的字面大小.
ExpandedSubBlockStart.gifContractedSubBlock.gif
        public Poker() dot.gif{ }
InBlock.gif        
public Poker(Int32 PokerIndex, Int32 PokerValue)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
this.PokerIndex = PokerIndex;
InBlock.gif            
this.PokerValue = PokerValue;
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }
然后将牌分成四部分.即三个玩家在未成为地主的时候,手上的17张牌.另外是三张地主牌.
None.gif          protected  Poker[] pk  =   new  Poker[ 54 ]; // 所有的牌
None.gif
         protected  Poker[] pk1  =   new  Poker[ 17 ]; // 发给第一个人的牌
None.gif
         protected  Poker[] pk2  =   new  Poker[ 17 ]; // 发给第二个人的牌
None.gif
         protected  Poker[] pk3  =   new  Poker[ 17 ]; // 发给第三个人的牌
None.gif
         protected  Poker[] pkTemp  =   new  Poker[ 3 ]; // 最后三张
然后产生整副牌
None.gif          // 产生牌
None.gif
         public   void  InitPk()
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
for (Int32 index = 0; index < pk.Length; index++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                pk[index] 
= new Poker();
InBlock.gif                pk[index].PokerIndex 
= index;
InBlock.gif                pk[index].PokerValue 
= index;
ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

进行洗牌.主要是对牌进行一种随机的交换
None.gif          // 洗牌
None.gif
         public   void  Random_Sequence()
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
int m, n;
InBlock.gif            Random ram 
= new Random();
InBlock.gif            
for (int i = 0; i < 1000; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                m 
= ram.Next(054);
InBlock.gif                n 
= ram.Next(054);
InBlock.gif                
if (m != n)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
this.Permute(m, n);
ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif        
// 置换牌
None.gif
         public   void  Permute(Int32 a, Int32 b)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            Poker temp;
InBlock.gif            temp 
= pk[a];
InBlock.gif            pk[a] 
= pk[b];
InBlock.gif            pk[b] 
= temp;
ExpandedBlockEnd.gif        }
然后将牌分成四份.
None.gif          // 发牌
None.gif
         public   void  Deal_cards()
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
for (int i = 0; i < 17; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                pk1[i] 
= pk[i * 3];
InBlock.gif                pk2[i] 
= pk[i * 3 + 1];
InBlock.gif                pk3[i] 
= pk[i * 3 + 2];
ExpandedSubBlockEnd.gif            }

InBlock.gif            pkTemp[
0= pk[51];
InBlock.gif            pkTemp[
1= pk[52];
InBlock.gif            pkTemp[
2= pk[53];
ExpandedBlockEnd.gif        }
对生成的牌进行排序.
None.gif         // 发牌
None.gif
         public   void  Deal_cards()
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
for (int i = 0; i < 17; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                pk1[i] 
= pk[i * 3];
InBlock.gif                pk2[i] 
= pk[i * 3 + 1];
InBlock.gif                pk3[i] 
= pk[i * 3 + 2];
ExpandedSubBlockEnd.gif            }

InBlock.gif            pkTemp[
0= pk[51];
InBlock.gif            pkTemp[
1= pk[52];
InBlock.gif            pkTemp[
2= pk[53];
ExpandedBlockEnd.gif        }

None.gif        
// 对牌排序
None.gif
         public  Poker[] Order_cards(Poker[] arr)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            Int32 c;
InBlock.gif            
for (Int32 index = 0; index < arr.Length; index++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                Math.DivRem(arr[index].PokerIndex, 
13out c);
InBlock.gif                
if (arr[index].PokerIndex == 53)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    arr[index].PokerValue 
= 16;
ExpandedSubBlockEnd.gif                }

InBlock.gif                
else if (arr[index].PokerIndex == 52)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    arr[index].PokerValue 
= 15;
ExpandedSubBlockEnd.gif                }

InBlock.gif                
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
if (c == 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        arr[index].PokerValue 
= 13;
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    
else if (c == 1)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        arr[index].PokerValue 
= 14;
ExpandedSubBlockEnd.gif                    }

InBlock.gif                    
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        arr[index].PokerValue 
= c;
ExpandedSubBlockEnd.gif                    }

ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

InBlock.gif            Sort(arr, arr.Length);
InBlock.gif            
return arr;
ExpandedBlockEnd.gif        }

None.gif        
// 排序
None.gif
         public   void  Sort(Poker[] arr, Int32 n)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            Int32 i, j, k;
InBlock.gif            Poker temp;
InBlock.gif            
for (i = 0; i < n; ++i)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                j 
= i;
InBlock.gif                
for (k = i + 1; k < n; ++k)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    
if (arr[j].PokerValue < arr[k].PokerValue)//如果前个数比后个数大,则交换位置。
ExpandedSubBlockStart.gifContractedSubBlock.gif
                    dot.gif{
InBlock.gif                        temp 
= arr[k];
InBlock.gif                        arr[k] 
= arr[j];
InBlock.gif                        arr[j] 
= temp;
ExpandedSubBlockEnd.gif                    }

ExpandedSubBlockEnd.gif                }

ExpandedSubBlockEnd.gif            }

ExpandedBlockEnd.gif        }

None.gif        
public   void  AfterSort()
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            pk1 
= Order_cards(pk1);
InBlock.gif            pk2 
= Order_cards(pk2);
InBlock.gif            pk3 
= Order_cards(pk3);
ExpandedBlockEnd.gif        }

在写的过程中,参考了这个贴子. http://www.cnblogs.com/blackzh/archive/2006/07/13/450036.html

转载于:https://www.cnblogs.com/hawking106123/archive/2007/06/14/783202.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值