现在到了,第二步,上一步我们已经做好了发牌模块,有了手牌,就需要判断牌型了,平时打扑克时,我们需要使用大脑进行判断自己手里的牌属于那种类型的,现在我们需要通过程序来进行判断!
在以下操作中,需要玩家手里的牌为五张,不然无法判断!
通过观察可以看出每名玩家的牌是以字符串的形式存储的,每张牌的字符串长度时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"#高牌
到这里,判断牌型就已经完毕了,有什么不懂的,可以在下方评论,小编会及时回复的
然后就是最最最关键的代码了,比较牌,这部分代码较长,可能会更新较慢,不要急躁哈,小编也上传了相关资源代码,可自行下在研究,或给予宝贵的意见!
也可发送至邮箱[email protected],小编会听取宝贵的意见的
相关资源:
正在审核中,通过之后,会第一时间,贴上链接