用python怎样实现扑克游戏中判断牌型的功能?
Admin 2021-11-24 群英技术资讯 470 次浏览
这篇文章我们来了解怎样用python怎样实现扑克游戏中判断牌型的功能,在扑克游戏,判断牌型是很基础的操作,这才能进行游戏的下一步。下面我们就来看看具体要怎样去实现。
在以下操作中,需要玩家手里的牌为五张,不然无法判断!
先给出发牌的一个效果图:
给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 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有帮助,想要了解更多大家可以关注其它的相关文章。
文本转载自脚本之家
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章介绍了Python中的协程(Coroutine)操作模块(greenlet、gevent),文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
这篇博文的目的是从图片中提取一定的矩形区域作为新的图片 简单来说:我的全家福丢了,所以我想从以前的房间照片里,提取出其中的全家福并重新打印一张(忽视画质问题)现在我就是这么个目的,需要的朋友可以参考下
这篇文章给大家分享的是怎样用python写一个自动生成日历功能的内容。小编觉得挺实用的,因此分享给大家做个参考,接下来一起跟随小编看看吧。
这篇文章主要介绍了python中关于range()函数反向遍历的几种表达,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
这篇文章主要介绍了python实现多线程并得到返回值的相关知识,包括带有返回值的多线程及实现过程解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008