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

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

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

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

上代码 :

//参数:要排序的牌值数组 & 数组长度

public int[] PaiXu(int[] card, int number = 0)

{

//Debug.Log(" ... 对手牌 进行 牌值 花色 的排序 ... ... ");

if (number == 0){ number = card.Length; }

if (card.Length == 0){ return card; }

// ========== 根据牌值进行排序 ===============

int temp = 0;

for (int i = 0; i < card.Length; i++) //冒泡排序... 从大到小

{

for (int j = 0; j < card.Length - 1 - i; j++)

{

if (card[j] < card[j + 1])

{

temp = card[j];

card[j] = card[j + 1];

card[j + 1] = temp;

}

}

}

List hei = new List();

List hong = new List();

List mei = new List();

List fang = new List();

List wang = new List();

for (int i = 0; i < card.Length; i++)

{

#region ======= 根据花色分组 ..大小王 单独一组 ...后续对花色中的 A 单独处理 =========

switch (sendFlower(card[i]))

{

case 3: //黑桃

hei.Add(card[i]);

break;

case 2: //红桃

hong.Add(card[i]);

break;

case 1: //梅花

mei.Add(card[i]);

break;

case 0: //方片

fang.Add(card[i]);

break;

case 4: //小王

case 5: //大王

wang.Add(card[i]);

break;

}

#endregion

}

QuA(hei); // 对A 的单独处理

QuA(hong);

QuA(mei);

QuA(fang);

#region ========== 合并 排序后的牌组========

List cardlist = new List();

for (int i = 0; i < wang.Count; i++) //王

{

cardlist.Add(wang[i]);

}

// ==========合并 组拼 ============

List cardtemp = new List();

cardtemp = PaiXuZuPin(hei, hong, mei, fang);

for (int i = 0; i < cardtemp.Count; i++)

{

cardlist.Add(cardtemp[i]);

}

int[] cards = new int[cardlist.Count];

for (int i = 0; i < cardlist.Count; i++)

{

cards[i] = cardlist[i];

}

#endregion

return cards;

}

///

/// 取A -- 把每个花色牌中的A,放到前面(A.K.Q.J...)

///

/// 花色牌

void QuA(List hei)

{

if (hei.Count == 0) return;

List cardlist = new List();

for (int i = 0; i < hei.Count; i++) // 将牌添加到新列表

{

cardlist.Add(hei[i]);

}

if (hei.Count > 2)

{

if (hei[hei.Count - 2] % 13 == 1) //如果有两个A (对两幅牌的处理)

{

cardlist.Insert(0, hei[hei.Count - 2]);

cardlist.Insert(0, hei[hei.Count - 1]);

for (int i = 0; i < hei.Count; i++)

{

hei[i] = cardlist[i];

}

return;

}

}

if (hei[hei.Count - 1] % 13 == 1) //如果有一个A

{

cardlist.Insert(0, hei[hei.Count - 1]);

}

for (int i = 0; i < hei.Count; i++)

{

hei[i] = cardlist[i];

}

}

///

/// 根据传入牌组 的顺序 进行组拼

///

public List PaiXuZuPin(List one, List two, List three, List four)

{

List cardlist = new List();

for (int i = 0; i < one.Count; i++)

{

cardlist.Add(one[i]);

}

for (int i = 0; i < two.Count; i++)

{

cardlist.Add(two[i]);

}

for (int i = 0; i < three.Count; i++)

{

cardlist.Add(three[i]);

}

for (int i = 0; i < four.Count; i++)

{

cardlist.Add(four[i]);

}

return cardlist;

}

///

/// 根据牌值取花色 5:大王 | 4:小王 | 3:黑桃 | 2:红桃 | 1:梅花 | 0:方片

///

///

public int sendFlower(int card)

{

if (card >= 1 && card <= 13)

{

return 3;

}else if (card >= 14 && card <= 26)

{

return 2;

}

else if (card >= 27 && card <= 39)

{

return 1;

}

else if (card >= 40 && card <= 52)

{

return 0;

}

else if (card == 53)

{

return 4;

}

return 5;

}

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

总结

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

php对扑克牌进行排序,C#代码实现扑克牌排序的几种方式相关推荐

  1. php递归算法排序,php常用的排序算法代码[冒泡,递归排序-PHP源码

    <script>ec(2);<script> php 常用的排序算法代码[冒泡,递归排序 冒泡排序算法 function bubblesort($arr) { $n=count ...

  2. 代码和产品发布的几种方式

    代码和产品发布的几种方式   最近有几个朋友提起"灰度发布"这个概念和相关的问题.想解释一下几种具体的发布方式(具体名称中文翻译不一定正确).他们的优缺点和实现难点. 这几种方式都 ...

  3. 希尔排序java代码_希尔排序及希尔排序java代码

    由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序按照此规律直到全部参与了排序.然后将间隔约定为4-1=3,然后 ...

  4. c语言排序系统代码怎么写,排序概述(c语言)(示例代码)

    排序问题可以说是算法入门中的入门了,可尽管如此,算法这个东西还是让许多初学者伤透了脑筋(such as me~).But,然而,但是,排序小结来了(基于c语言),希望能给读者包括笔者本身带来理解上的新 ...

  5. 冒泡排序的两种方式c语言代码,【C语言】两种方式实现冒泡排序算法

    题目要求 编写一个C语言程序,实现基本的冒泡排序算法. 算法 冒泡排序,用一句话来总结: 一组数中,相邻的两个数进行比较.交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序 要想对N个数字进行 ...

  6. 将Eclipse代码导入到AndroidStudio的两种方式

    实现步骤 1. 从Eclipse中导出Gradle build files 在Eclipse菜单中 File --> Export-->Generate Gradle build file ...

  7. C/C++面试题—合并两个排序的链表【递归和循环两种方式】

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表, 当然我们需要合成后的链表满足单调不减规则. 解题思路 这道题既可以采用递归的方式,也可以采用循环的方式. 2者的思路都是殊途同归的. 合并 ...

  8. sql给数据库表字段进行首字母排序(字符、数字、英文)(两种方式)

    第一种:编写一个数据库函数,增加一个空字段,提取首字母: 网上找了一个,但是不识别有些汉子,我就不贴代码了 第二种:直接 select * from table order by CONVERT(字段 ...

  9. 用代码实现标签打印的三种方式

    最近项目中要实现标签打印的功能,有几个条件 标签模板可以事先生成,用的是CodeSoft软件 标签模板里面有二维码 标签模板里面有一些变量,要求打印的时候自动填充 产线电脑上没有安装CodeSoft, ...

最新文章

  1. 稚晖君自制机械臂,能给葡萄缝针的那种,成本1万块,网友:能把脑子开源一下?...
  2. 【mysql】mysql的数据库主从2(双主双从)
  3. 大数据DDos检测——DDos攻击本质上是时间序列数据,t+1时刻的数据特点和t时刻强相关,因此用HMM或者CRF来做检测是必然! 和一个句子的分词算法CRF没有区别!...
  4. xml文档包含html代码_为什么文档很重要,以及为什么应将其包含在代码中
  5. 服务器u8系统数据库不存在,用友u8服务器端数据库不装
  6. gradle下载的依赖包位置
  7. leetcode python3 简单题202. Happy Number
  8. pycharm右侧显示代码缩略图/预览 CodeGlance
  9. 【雨林木风】装机人员常用软件工具盘Y6.5
  10. (22) 基于动态时空图卷积神经网络的交通流预测
  11. jsMind 实现复制粘贴
  12. 基因型填充中的phasing究竟是什么
  13. 期权杠杆比率如何计算?
  14. 《牧羊少年奇幻之旅》保罗·科埃略
  15. ReactOS实践(一) ReactOS 源代码编译以及VMWare下运行
  16. ecs共享型s6怎么样?
  17. 领域知识图谱落地实践中的问题与对策
  18. 估图数科财税票采集机器人进行合规数据采集
  19. linux系统ata1.00,linux – 哪个硬盘对应ata1.00和ata12.00?
  20. WCF大数据传输造成400错误的解决方案

热门文章

  1. OpenSSL加密与证书
  2. 截网页全屏图的方法-截网页全屏软件-Web2Pic Pro
  3. 如何将hive查询结果导出成txt文件
  4. python单词反转_python文本 字符串逐字符反转以及逐单词反转
  5. tkmybatis 子查询_真假童子命符箓道长教你如何查询
  6. substr php,PHP substr() 函数
  7. java中null是常量吗_C_NULL Julia中的常量
  8. 两顶点的路径长度为k_计算两个顶点之间的所有可能路径
  9. 写python笔记本推荐_写个python程序帮你清理垃圾
  10. python web服务器 apache_Windows下搭建Apache+Django+Python Web服务环境