python实战之德州扑克第二步-判断牌型

作者:刘sir学代码 时间:2021-03-19 12:37:28 

一、前言

现在到了,第二步,上一步我们已经做好了发牌模块,有了手牌,就需要判断牌型了,平时打扑克时,我们需要使用大脑进行判断自己手里的牌属于那种类型的,现在我们需要通过程序来进行判断!

在以下操作中,需要玩家手里的牌为五张,不然无法判断!

先给出发牌的一个效果图:

给2人发五张牌:

python实战之德州扑克第二步-判断牌型

二、分析

通过观察可以看出每名玩家的牌是以字符串的形式存储的,每张牌的字符串长度时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 f
   else:return t

def color_type(CO):#存储花色是否一样  是:true  否:false
   A=["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=0
   num=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=4
       elif value[A] == value[A - 1]:
           num += 1

if 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"#高牌

已经知道花色,和牌值,只需要进行简单的判断即可,小编给出的方法比较普通,相信你们可以写出更好的!

四、总结

上面一段代码,只是返回不同牌型对应的数值,我们只需做一个简单的转换即可,相信你可以做到,代码中注释也给出了对应的牌型

点击链接查看

python实战之德州扑克第一步-发牌

python实战之德州扑克第三步-比较大小

来源:https://blog.csdn.net/liudadaxuexi/article/details/115821359

标签:python,德州扑克,判断牌型
0
投稿

猜你喜欢

  • Python各类图像库的图片读写方式总结(推荐)

    2021-05-20 00:50:22
  • python数据类型bytes 和 bytearray的使用与区别

    2021-08-26 05:51:48
  • PHP获取url的函数代码

    2023-10-15 12:45:00
  • css基础教程属性篇之盒子模型

    2008-07-29 12:05:00
  • Numpy数组array和矩阵matrix转换方法

    2021-06-25 06:17:26
  • Python爬取求职网requests库和BeautifulSoup库使用详解

    2021-12-29 09:07:49
  • python实现批量获取指定文件夹下的所有文件的厂商信息

    2021-12-14 20:42:27
  • asp使用Application来统计在线人数方法

    2007-08-13 12:43:00
  • CSS在Internet Explorer 6, 7 和8中的差别

    2009-10-26 18:14:00
  • python中multiprosessing模块的Pool类中的apply函数和apply_async函数的区别

    2023-03-21 20:23:37
  • Django实现简单网页弹出警告代码

    2022-12-31 06:56:16
  • 谈谈我的“分离”观

    2010-08-31 14:47:00
  • python点云地面点滤波(Progressive Morphological Filter)算法介绍(PCL库)

    2021-12-23 00:38:29
  • 在pycharm中使用matplotlib.pyplot 绘图时报错的解决

    2021-05-22 10:37:31
  • pytorch model.cuda()花费时间很长的解决

    2021-12-08 08:02:06
  • asp如何制作一个股票滚屏显示面板?

    2010-07-07 12:27:00
  • 解决linux下使用python打开terminal时报错的问题

    2022-10-06 10:46:25
  • 在Pycharm中安装Pandas库方法(简单易懂)

    2023-07-21 19:26:28
  • python3使用mutagen进行音频元数据处理的方法

    2023-05-25 04:05:32
  • Python调用钉钉自定义机器人的实现

    2023-08-29 20:08:55
  • asp之家 网络编程 m.aspxhome.com