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

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

我做的这个是由(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:代码仅供参考,优化自行处理

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle10g导入dmp文件恢复,oracle 10g 恢复dmp文件。

1. 在winxp下&#xff0c;安装10g&#xff0c;默认选择&#xff0c;一路ok。(安装前自检出现dhcp警告&#xff0c;可直接忽略)2.命令行&#xff0c;在xp下&#xff0c;输入sqlplus&#xff0c;即可启动&#xff0c;登陆用 sqlplus / as sysdba 用管理员登陆3.在恢复oracle时&am…

js十秒没有点击怎么判断_MAC口红怎么判断真假?没批号就没有生产日期,网友:品控太差...

一般来说&#xff0c;MAC的口红产品&#xff0c;底部都会有三位编码&#xff0c;这是该款口红的批号。因像MAC这类国外美妆护肤品牌&#xff0c;是不会将生产日期明确的标注在产品上&#xff0c;都是将其编码成批号&#xff0c;在标注在外包装或者产品的侧面、底部等边缘位置。…

剪辑内核linux,Linux01-Linux编辑内核定制属于自己的内核49

一、编译内核相关命令1、重装initrd文件命令&#xff1a;mkinitrd&#xff1a;creates initial ramdisk p_w_picpaths forpreloading modules格式:mkinitrd initrd文件路径 内核版本号,如:mkinitrd/boot/initrd-uname -r.img uname -r2、I/O处理命令a、命令格式说明2${parame…

go run main.go 参数_介绍一款Go项目热编译工具gowatch

使用场景在golang项目编写过程中&#xff0c;需要对项目不断的进行构建go build并调试以快速发现问题&#xff0c;而我们每次进行手动的进行go build又太重复&#xff0c;所以写了这么一个工具gowatch来实时的监听文件的改动并编译运行&#xff0c;大大提升开发效率。快速入门安…

linux 服务端口查询,linux 怎么查看服务和端口

(1)查看本机关于IPTABLES的设置情况[roottp ~]# iptables -L -nChain INPUT (policy ACCEPT)target prot opt source destinationChain FORWARD (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destinationChain RH-Fi…

python 捕获鼠标点击事件,在Python中的wx.Frame外部捕获鼠标事件

In Python using wxPython, how can I set the transparency and size of a window based on the proximity of the mouse relative to the applications window, or frame?Eg. similar to a hyperbolic zoom, or The Dock in MAC OS X? I am trying to achieve this effect …

linux cordova安装教程,cordova搭建环境

cordova搭建环境一、配置java环境变量1.安装JDK 选择安装目录 安装过程中会出现两次 安装提示 。第一次是安装 jdk &#xff0c;第二次是安装 jre 。建议两个都安装在同一个java文件夹中的不同文件夹中。(不能都安装在java文件夹的根目录下&#xff0c;jdk和jre安装在同一文件夹…

安卓rpg绅士游戏资源_海贼无双3(动作游戏)——电脑安卓单机游戏下载资源分享...

点击上方蓝字关注我们01游戏简介&#xff1a;游戏名称&#xff1a;海贼无双3其它名称&#xff1a;One Piece - Pirate Warriors 3游戏类型&#xff1a;动作游戏开发发行&#xff1a;Omega Force游戏平台&#xff1a;PC整理时间&#xff1a;2020-04-25官方网址&#xff1a;http:…

linux分区始柱号,找到了linux分区顺序错乱修复方法

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼我之前安装ARCH时 因为自带的CFDISK工具太烂使用了主流的FDISK和PARTED 都远远不如DISKPART满意 功能弱不说最重要的就是莫名奇妙的错误超级多 错误提示还少甚至没有 让人郁闷到极限尤其是parted 因为没光驱 硬盘安装 之前又是WIND…

11210怎么等于24_想要消耗100大卡热量,怎么做才最简单?

减肥&#xff0c;最根本的原理就是制造热量差&#xff0c;从饮食上限制热量的摄入&#xff0c;调理体质让基础代谢更高&#xff0c;运动来进一步增加消耗&#xff0c;当热量差达到7000大卡左右的时候&#xff0c;就能瘦下来1kg的纯脂肪&#xff01;美食当前&#xff0c;自然要先…

连接linux工具Mtr,Linux常用网络工具:路由扫描之mtr

除了上一篇《Linux常用网络工具&#xff1a;路由扫描之traceroute》介绍的traceroute之外&#xff0c;一般Linux还内置了另一个常用的路由扫描工具mtr。mtr在某些方面比traceroute更好用&#xff0c;它可以实时显示经过的每一跳路由的信息&#xff0c;并不断进行探测。tracerou…

redis rua解决库存问题_【150期】面试官:Redis的各项功能解决了哪些问题?

点击上方“Java面试题精选”&#xff0c;关注公众号面试刷图&#xff0c;查缺补漏>>号外&#xff1a;往期面试题&#xff0c;10篇为一个单位归置到本公众号菜单栏->面试题&#xff0c;有需要的欢迎翻阅阶段汇总集合&#xff1a;一百期面试题汇总先看一下Redis是一个什…

启动盘Linux windows,Linux 中创建 USB 启动盘来拯救 Windows 用户

人们经常要求我帮助他们恢复被锁死或损坏的 Windows 电脑。有时&#xff0c;我可以使用 Linux USB 启动盘来挂载 Windows 分区&#xff0c;然后从损坏的系统中传输和备份文件。有的时候&#xff0c;客户丢失了他们的密码或以其他方式锁死了他们的登录账户凭证。解锁账户的一种方…

vue验证整数_前端Vue中常用rules校验规则

前端Vue中常用rules校验规则1、是否合法IP地址export function validateIP(rule, value,callback) {if(value||valueundefined||valuenull){callback();}else{const reg /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\![](https://user-gold-cdn.xit…

linux make编译报错 mv,Linux下安装redis

1&#xff1a;首先下载redis http://redis.io/download2: 需要Linux安装gcc依赖3&#xff1a;进行解压 tar -zxvf redis-3.0.0-rc2.tar.gz4&#xff1a;进入到redis-3.0.0目录下&#xff0c;进行编译 make (如果make编译报错 可直接用 make MALLOClibc 解决)5&#xff1a;…

c#中connect函数_C#.NET 各种连接字符串

1.C#连接连接Access程序代码:using System.Data;using System.Data.OleDb;..string strConnection"ProviderMicrosoft.Jet.OleDb.4.0;";strConnection"Data SourceC:BegASPNETNorthwind.mdb";OleDbConnection objConnectionnew OleDbConnectio…

echarts里面的参数解释_Echarts适用小技巧:适用参数详细说明及示例-TS文件

点击右上方红色按钮关注“web秀”&#xff0c;让你真正秀起来前言前面有文章&#xff0c;讲述了Vue中封装Echarts组件&#xff0c;但都是直接上代码&#xff0c;没有具体对代码进行讲述。今天我们就来看看&#xff0c;如何使Echarts图表更美观&#xff0c;都是那部分属性使其更…

linux桌面版自动更新关闭了,桌面应用|开启 Ubuntu 系统自动升级

在学习如何开启Ubuntu系统自动升级之前&#xff0c;先解释下为什么需要自动升级。默认情况下&#xff0c;ubuntu每天一次检查更新。但是一周只会弹出一次软件升级提醒&#xff0c;除非当有安全性升级时&#xff0c;才会立即弹出。所以&#xff0c;如果你已经使用Ubuntu一段时间…

做自适应网站专业乐云seo_什么叫网站优化-网站建设-SEO优化

公司致力于企业品牌营销策划、网站建设、网站优化、五网竞价推广、商城建设、小程序开发、搜索引擎推广、SEO及企业品牌整合营销、全网整合营销霸屏推广等专业一站式网络全包服务。为不同企业品牌量身定制合适的设计方案&#xff0c;提供专业一站式网站服务平台、网络广告投放平…

linux native分区,怎么将硬盘格式分区为Linux Native格式的

根据目前流行的操作系统来看&#xff0c;常用的分区格式有四种&#xff0c;分别是FAT16、FAT32、NTFS和Linux。资格最老的当然就是FAT16啦&#xff0c;这是MS&#xff0d;DOS和最早期的Windows 95操作系统中最常见的磁盘分区格式。它采用16位的文件分配表&#xff0c;而且是目前…