c#代码实现扑克牌排序的几种方式

  

扑克牌游戏,总是能用到很多的手牌排序,总结了几种方式供参考,顺便记录一下方便以后使用。

  

我做的这个是由(1-13:黑桃a - k | | 14 - 26:红桃| | 27 - 39:梅花| | 39 - 52:方片| | 53.54:小王。大王)表示的一副扑克牌,这样对数组除以13等于扑克花色(如:25/13=2是红桃),对数组值取模等于扑克点数(如:25% 13=12是Q,这样25就表示了红桃问的扑克牌。

  

当处理特殊规则的时候单独写一个列表,在组拼就可以了。

  

比如说:赖子斗地主的时候,当选出赖子牌之后,就需要对手牌再次排序,那么新列表来存一下赖子牌,选定赖子牌之后,存到列表中,再次调用排序,组拼就可以实现,你想要的手牌排序的数组,那么在通过某种形式让他显示出来就可以了。

  

<强>上代码:

     //参数:要排序的牌值数组,数组长度   公共int [] PaiXu (int[]卡,int数=0)   {//调试。日志(“…对手牌进行牌值花色的排序……”);   如果(数量==0){=card.Length;}   如果卡。长度==0){回帖;}//==========根据牌值进行排序===============int temp=0;   for (int i=0;我& lt;card.Length;我+ +)//冒泡排序……从大到小   {   for (int j=0;j & lt;卡。长度- 1——我;j + +)   {   如果卡[j] & lt;卡[j + 1])   {   temp=卡[j];   卡[j]=卡[j + 1);   卡(j + 1)=temp;   }   }   }   List黑=new List ();   List香港=new List ();   List美=new List ();   List方=new List ();   List王=new List ();   for (int i=0;我& lt;card.Length;我+ +)   {=======#区域根据花色分组. .大小王单独一组……后续对花色中的一个单独处理=========开关(sendFlower(卡[我]))   {   案例3://黑桃   hei.Add(卡[我]);   打破;   案例2://红桃   hong.Add(卡[我]);   打破;   案例1://梅花   mei.Add(卡[我]);   打破;   例0://方片   fang.Add(卡[我]);   打破;   案例4://小王   案例5://大王   wang.Add(卡[我]);   打破;   }   # endregion   }   作为(黑);//对的单独处理   作为(香港);   作为(美);   作为(方);   #地区==========合并排序后的牌组========Listcardlist=new List ();   for (int i=0;我& lt;wang.Count;我+ +)//王   {   cardlist.Add(王[我]);   }//==========合并组拼============Listcardtemp=new List ();   cardtemp=PaiXuZuPin(黑、香港美,方);   for (int i=0;我& lt;cardtemp.Count;我+ +)   {   cardlist.Add (cardtemp[我]);   }   int[]牌=new int [cardlist.Count];   for (int i=0;我& lt;cardlist.Count;我+ +)   {   卡[我]=cardlist[我];   }   # endregion   返回卡;   }///& lt; summary>///取,把每个花色牌中的一个,放到前面(A.K.Q.J…)///& lt;/summary>///& lt;参数name="黑"祝辞花色牌& lt;/param>   无效的必要(List黑)   {   如果(黑。数==0)返回;   Listcardlist=new List ();   for (int i=0;我& lt;hei.Count;我+ +)//将牌添加到新列的表   {   [我]cardlist.Add(黑);   }   如果(黑。数比;2)   {   如果(黑(黑。数- 2]% 13==1)//如果有两个一个(对两幅牌的处理)   {   cardlist。插入(0,黑(黑。数- 2]);   cardlist。插入(0,黑(黑。数- 1));   for (int i=0;我& lt;hei.Count;我+ +)   {   黑[我]=cardlist[我];   }   返回;   }   }   如果(黑(黑。数- 1)% 13==1)//如果有一个   {   cardlist。插入(0,黑(黑。数- 1));   }   for (int i=0;我& lt;hei.Count;我+ +)   {   黑[我]=cardlist[我];   }   }///& lt; summary>///根据传入牌组的顺序进行组拼///& lt;/summary>   公共ListPaiXuZuPin (List   公共int sendFlower (int卡)   {   如果卡在=1,,卡& lt;=13)   {   返回3;   }else if(卡祝辞=14,,卡& lt;=26)   {   返回2;   }   else if(卡祝辞=27,,卡& lt;=39)   {   返回1;   }   else if(卡祝辞=40,,卡& lt;=52)   {   返回0;   }   else if(卡==53)   {   返回4;   }   返回5;   }      

PS:代码仅供参考,优化自行处理

  

<强>总结

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

c#代码实现扑克牌排序的几种方式