实践二------牌型判断

起始

现在到了,第二步,上一步我们已经做好了发牌模块,有了手牌,就需要判断牌型了,平时打扑克时,我们需要使用大脑进行判断自己手里的牌属于那种类型的,现在我们需要通过程序来进行判断!
在以下操作中,需要玩家手里的牌为五张,不然无法判断!

先给出发牌的一个效果图:
给2人发五张牌:

分析

通过观察可以看出每名玩家的牌是以字符串的形式存储的,每张牌的字符串长度时3(!!!)
判断牌型就需要熟悉牌型的组成了了

     皇家同花顺:同一花色最大的顺子同花顺:同一花色的顺子四条:四张相同+1个单张葫芦:三张相同+1对同花:5张牌花色相同顺子:花色不同的顺子三条:三张相同+2单张两对:2对+1单一对:1对+3单张高牌:五个单张牌

我们把牌型分为两类,同花的{皇家同花顺,同花顺,同花},其余的为非同花
接下来就先需要判断是否为同花,然后在具体判断,例如皇家同花顺,只有一种类型,直接判断即可,其余的可看下方!
事不宜迟,上手操作!

敲代码

这里我们得先知道,玩家的花色,每张牌占三个字符串,花色占一个,牌值占两个,我们是不是可以通过分片操作,把花色提取出来,保存到一个列表中尼!方便操作!

COL=copy.deepcopy(C)for I in range(len(COL)):for j in range(len(COL[I])):COL[I][j] = COL[I][j][0:1]#print("color",C)return COL

代码中又出现了深拷贝这个函数,具体作用上一篇文章已经讲过了,不再重复!

大概流程:首先深拷贝,含有玩家牌的二维数组双重循环提取花色,就得到了一个仅含花色的二位列表且对应的玩家没有改变

然后就是判断花色是不是一样

def color_analysis(Color):#是否为同色,传入一维花色列表f="false"#同花t="true"#非同花col=len(set(Color))if col>1:return felse:return tdef color_type(CO):#存储花色是否一样  是:true  否:falseA=["0" for i in range(len(CO))]for i in range(len(CO)):A[i]=color_analysis(CO[i])#print(a)return A

通过两个函数进行判断,使用到了set()去重,如果去重之后为1,则为同花,不唯1则不为同花

我们判断好了是否为同花,接下来就是判断牌值了,首先需要取牌值,思路和取花色一样的,就不贴代码了,取值之后,因为含有J,Q,K,A,我们需要特殊处理一下,我们把A替换为14,K替换为13,以此类推J为11,特殊处理之后得到的是字符型的值,我们还需要整型化,为了方便比较,还需要进行排序操作
一下只贴出部分代码,已经有了思路,相信你可以把代码补全!

def get_int_value(value):value=get_transform_value(value)for i in range(len(value)):value[i]=list(map(int,value[i]))return value
def sort_values(values):values=get_int_value(values)for i in range(len(values)):values[i].sort(reverse=True)return values

经过以上操作,我们得到了玩家是手里的牌是否为同花及其牌值,且顺序是对应的
然后就是比较了,思路上面已经给出了,给出关键代码:


def judge_card_type(value,Color_type):#value为一个玩家的牌值须按照从大到小排好序,color为对应的花色result=0num=0#牌值相同的个数if len(value)!=5:print("牌数不为五张或过多,无法判断!")sys.exit()for A in range(0, len(value)):#统计相等的个数 或者是否为顺子if value[A-1]- value[A]== 1:result += 1#如果为顺子,则resul=4elif value[A] == value[A - 1]:num += 1if Color_type=="true":#同花if value==[13,12,11,10,9]:#皇家同花顺return "0"elif result==4:#同花顺return "1"else:return "4"#同花if Color_type=="false":#非同花if num==3:#四条或葫芦if value[1]==value[2]==value[3]==value[4] or value[0]==value[1]==value[2]==value[3]:return "2"#四条else: return "3"#葫芦elif result==4:#顺子return "5"elif num==2:#三条或两队if value[0]==value[1]==value[2] or value[1]==value[2]==value[3] or value[2]==value[3]==value[4]:return "6"#三条else: return "7"#两队elif num==1:#一对return "8"else:return "9"#高牌

已经知道花色,和牌值,只需要进行简单的判断即可,小编给出的方法比较普通,相信你们可以写出更好的!
上面一段代码,只是返回不同牌型对应的数值,我们只需做一个简单的转换即可,相信你可以做到,代码中注释也给出了对应的牌型


到这里,判断牌型就已经完毕了,有什么不懂的,可以在下方评论,小编会及时回复的
然后就是最最最关键的代码了,比较牌,这部分代码较长,可能会更新较慢,不要急躁哈,小编也上传了相关资源代码,可自行下在研究,或给予宝贵的意见!
也可发送至邮箱1640847745@qq.com,小编会听取宝贵的意见的
相关资源:
正在审核中,通过之后,会第一时间,贴上链接

德州扑克实践之二------判断牌型相关推荐

  1. 德州扑克实践之刚开始!------发牌

    最近小编在做一个关于德州扑克的小游戏,当然已经做完了,才写的一系列文章来记录一下自己的开发经历 一系列文章主要包括: 1.发牌2.判断牌型3.比较牌的大小4.开始游戏5.总结 说明: 制作的德州扑克仅 ...

  2. 棋牌游戏开发之地主算法判断牌型

    棋牌游戏开发咨询 QQ:325131039 棋牌游戏开发咨询交流群: 490287966 由于近年来网络棋牌游戏的火爆导致个各个地区的特色棋牌游戏进入开发的红火时期,也有越来越多的团队个人开始研究棋牌 ...

  3. 德州扑克实践之三-----比较大小

    经过前面的两篇文章,整体工作已经完成了2/3了,剩下的1/3,将会在本片文章提及 整体流程: 比较之前须得获取,牌型,牌值,这两部分在上一篇文章已经讲解了,不懂得小伙伴可私信我,乐意解答! 之后就是简 ...

  4. Java 设计模式最佳实践:二、创建型模式

    原文:Design Patterns and Best Practices in Java 协议:CC BY-NC-SA 4.0 贡献者:飞龙 本文来自[ApacheCN Java 译文集],采用译后 ...

  5. python做一副54扑克牌发牌技巧_德州扑克讲堂:高级技巧 胜率之摊牌胜率的算法...

    行动胜率的算法.行动获胜是德州扑克中唯二的获胜方式,掌握了对手的弃牌率的话,就算手里完全没牌也可以轻松获胜.然而具体打出对手稳定的弃牌则是一种高级技巧.对于初学玩家,推荐掌握好摊牌胜率的算法,稳当地用 ...

  6. 我的第一篇博客_在Linux下用C++编写的德州扑克游戏

    文章目录 序言 抽象思路 类的抽象 牌类(Card) 一组牌(GroupCards) 牌堆(DeckCards) 牌堆类设计 初始化卡牌 洗牌 与手牌公共牌的关系 手牌(HandCards) 公共牌( ...

  7. 普通人都能看懂的德州扑克-python版

    文章目录 德州扑克 概要需求分析 编码实现 模拟扑克牌(文件:card.py) 模拟发牌(文件:poke.py) 判断类型(文件:play.py) 开始游戏(文件:game.py) 德州扑克 德州扑克 ...

  8. 德州扑克游戏算法讲解

    转载自: https://blog.csdn.net/wojiushi3344/article/details/8967735 德克萨斯扑克全称Texas Hold'em poker,中文简称德州扑克 ...

  9. 【华为OD机试真题 JS】德州扑克

    标题:德州扑克 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限 五张牌,每张牌由牌大小和花色组成,牌大小2~10.J.Q.K.A,牌花色为红桃.黑桃.梅花.方块四种花色之一. 判 ...

最新文章

  1. vue 数组删除 dome没更新_详解Vue响应式原理
  2. python 字符串 数字_Python基础教程:数字、字符串
  3. oracle之Flash Recovery Area全面介绍
  4. 【Mysql】Mysql数据表区分大小写问题解决方案
  5. 门禁系统服务器 控制器 读卡器,你知道门禁系统读卡器分为多少种吗?
  6. Vue 项目部署出现css样式失效的解决方案
  7. 修改 timezone
  8. java的几个概念AOP、IOC、DI、DIP、工厂模式、IOC容器
  9. vue的自定义指令的坑
  10. 最新Python爬取淘宝评论(2020年4月)
  11. 扩展欧几里得算法求逆元c语言,扩展欧几里得算法及求逆元
  12. mobi电子书中删除多余的空格
  13. 网站上传服务器及安装包,如何上传安装包到服务器
  14. access和filemaker_四个替代微软Access的开源产品
  15. 真正的QString转char,utf8编码转gb2312编码
  16. Kotlin StandardKt
  17. 周鸿祎:写区块链最好的一篇文章
  18. 赋值运算符的基本用法
  19. 交规考试通过,庆祝一下
  20. Linux 最大文件名

热门文章

  1. uniapp连接蓝牙设备
  2. Mac快捷键大全(常用的可以修改)
  3. Linux文件、目录的权限
  4. [Pandas] 相同分组条件下的特定列除第一行以外的值为空
  5. 最好用的Android黑客应用程序和工具
  6. unity_Text文本和图片组合
  7. 手把手教你搭建视频去重系统
  8. IIS无法下载wgt apk文件问题
  9. 大疆OSMO POCKET(大疆灵眸)使用无线模块连接手机后瞬间断开连接的解决办法
  10. 海尔微型计算机云悦mini2a,更小更轻新 主机云悦mini2A参数曝光