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实战之德州扑克第三步-比较大小

到此这篇关于python实战之德州扑克第二步-判断牌型的文章就介绍到这了,更多相关python实现德州扑克判断牌型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python用类实现扑克牌发牌的示例代码

    1. 题目 编写程序, 4名牌手打牌,计算机随机将52张牌(不含大小鬼)发给4名牌手,在屏幕上显示每位牌手的牌. 提示: 设计出3个类:Card类.Hand类和Poke类. Card类代表一张牌,其中FaceNum字段指出是牌面数字1~13,Suit字段指出的是花色,值"梅"为梅花,"方"为方块,"红"为红心,"黑"为黑桃. Hand类代表一手牌,可以认为是一位牌手手里的牌,其中cards列表变量存储牌手手里的牌.可以增加牌.

  • 基于Python制作一副扑克牌过程详解

    整理一下通过本文分享给大家, 该案例是通过 Python 类属性创建一幅除去大王.小王之后的 52 张扑克牌,并实现随机抽牌.排序.洗牌等功能: 创建一个纸牌类 一副扑克除去大王小王之外,剩下的 52 张纸牌以花色为基准(梅花.方块.黑桃.红心)可分为 4 组,每组有 13 张牌组成:因此可创建两个列表一个来存储花色,一个存储 13 个字符:通过两个列表之间的随机组合来生成 52 张纸牌, 代码如下: ​ 代码中通过collections.namedtuple模块创建一个类来表示一幅纸牌,['r

  • python实现四人制扑克牌游戏

    本文实例为大家分享了python实现四人制扑克牌游戏的具体代码,供大家参考,具体内容如下 题目: 设计一个简单的四人制扑克牌游戏,能够完成以下功能: 1. 洗牌 2. 发牌 3.自定义规则,在每轮单张出牌时,判定赢家 4.自定义规则,判定最终的赢家 规则简化版: 仅能出单张牌,且出牌时,每个人出的是自己手中牌中刚好能压过上家的最小牌,最先出完的为赢家 import random from random import choice flower = ['\u2660','\u2663','\u26

  • Python实现比较扑克牌大小程序代码示例

    是Udacity课程的第一个项目. 先从宏观把握一下思路,目的是做一个比较德州扑克大小的问题 首先,先抽象出一个处理的函数,它根据返回值的大小给出结果. 之后我们在定义如何比较两个或者多个手牌的大小,为方便比较大小,我们先对5张牌进行预处理,将其按照降序排序,如下: def card_ranks(hand): ranks = ['--23456789TJQKA'.INDEX(r) for r, s in hand] ranks.sort(reverse=True) return ranks 然后

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

    一.前言 经过前面的两篇文章,整体工作已经完成了2/3了,剩下的1/3,将会在本片文章提及 前面两步文章链接 python实战之德州扑克第一步-发牌 python实战之德州扑克第二步-判断牌型 整体流程: 比较之前须得获取,牌型,牌值,这两部分在上一篇文章已经讲解了,不懂得小伙伴可私信我,乐意解答! 之后就是简单的遍历,通过两两比较,并排好序,就得到含有玩家按顺序从大到小拍好的数组,类似于[0,3,1,2] 然后就是翻译:玩家0>玩家3>玩家1>玩家2 说明:比较大小并排序有许多算法,小

  • python模拟实现分发扑克牌

    本文实例为大家分享了python分发扑克牌的具体代码,供大家参考,具体内容如下 52张扑克牌发个4个玩家,每人13张. 要求: 自动生成一幅扑克牌组:洗牌:发牌到玩家手中:将玩家手中扑克牌按花色大小整理好. 思路一 import random import operator def auto(): pokers=[] poker=[] for i in ['♥','♠','♦','♣']: for j in ['A','2','3','4','5','6','7','8','9','10','J

  • 华为校园招聘上机笔试题 扑克牌大小(python)

    本文为大家分享了华为校园招聘上机笔试题,供大家参考,具体内容如下 [编程题] 扑克牌大小 时间限制:10秒 空间限制:131072K 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A,2各4张,小王1张,大王1张. 牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):)  3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER  输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-&quo

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

    一.前言 现在到了,第二步,上一步我们已经做好了发牌模块,有了手牌,就需要判断牌型了,平时打扑克时,我们需要使用大脑进行判断自己手里的牌属于那种类型的,现在我们需要通过程序来进行判断! 在以下操作中,需要玩家手里的牌为五张,不然无法判断! 先给出发牌的一个效果图: 给2人发五张牌: 二.分析 通过观察可以看出每名玩家的牌是以字符串的形式存储的,每张牌的字符串长度时3(!!!) 判断牌型就需要熟悉牌型的组成了 皇家同花顺:同一花色最大的顺子 同花顺:同一花色的顺子 四条:四张相同+1个单张 葫芦:

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

    一.前言 最近小编在做一个关于德州扑克的小游戏,当然已经做完了,才写的一系列文章来记录一下自己的开发经历 点击链接查看其他文章 python实战之德州扑克第二步-判断牌型 python实战之德州扑克第三步-比较大小 一系列文章主要包括: 1.发牌 2.判断牌型 3.比较牌的大小 4.开始游戏 5.总结 二.说明 制作的德州扑克仅供参考,提供源码,源码可运行 可满足基本操作,另外还有一些小功能,可先自行研究 和真正的德州扑克游戏相比,九牛一毛,可用来练练手 附:本源码可优化,如果有实力,有时间,可

  • 利用Python编写简易版德州扑克小游戏

    目录 德州扑克简要介绍 什么是德州扑克 游戏规则简要介绍 德州扑克游戏的python实现过程 游戏初始化 评选赢家 游戏主题函数 游戏体验与展示 模块不足与后续改进 德州扑克简要介绍 什么是德州扑克 德州扑克不知道大家是否玩过,它是起源于美国的得克萨斯州的一种博弈类卡牌游戏,英文名叫做Texas Hold’em Poker.玩法上又分为常规桌(Cash, 现金局),单桌赛(SNG)和多桌锦标赛(MTT).虽然扑克种类繁多,但基本的扑克规则通常保持一致.它是一种考验心态与谋略的游戏. 游戏规则简要

  • python实战小游戏之考验记忆力

    导语 哈喽!大家好,我是木木子. 今日游戏更新系列来啦,是不是很想知道今天的游戏是什么类型的?立马安排上-- 随着年纪的不断上升,我们开始丢三落四,忘东忘西,记忆力越来越差了! 这不止大人随着年纪增大记忆力退却,其实很多小孩子也是一样~ 很多家长是不是经常抱怨: "我家孩子背课文特别慢,常常背了几十遍都背不下来,昨晚又背到一点多,我都要崩溃了: 在给孩子辅导课后作业,明明很简单的古诗词填空,孩子的第一反应就是打开书照抄,如果不翻课本,半天写不出来: 昨晚单词背得还好好的,第二天早上抽查的时候,1

  • Python实战之实现简单的名片管理系统

    一.前言 实现名片管理系统,首先要创建两个python file ,分别是cards_main.py和cards_tool.py,前一个是主代码块的实现,后一个是提供主代码块所调用的函数 二.主代码块的实现 import cards_tool as ct #导入cards_tool文件,简称ct,以便调用其中的函数 while True: ct.show_menu() num=int(input("请选择操作功能:")) print(f"您选择的操作是[{num}]"

  • Python实战之实现康威生命游戏

    前言 康威生命游戏设计并不难,我的思路就是借助pygame进行外观的展示,最近一段时间的游戏项目都是使用pygame进行的,做起来比较顺利.内部代码的实现也比较简单根据他的规则我们需要的是多次的计算和判断,再刷新数组. 一.康威生命游戏规则 当周围仅有1个或没有存活细胞时, 原来的存活细胞进入死亡状态.(模拟生命数量稀少)当周围有2个或3个存活细胞时, 网格保持原样.当周围有4个及以上存活细胞时,原来的存活细胞亦进入死亡状态.(模拟生命数量过多)当周围有3个存活细胞时,空白网格变成存活细胞.(模

  • python实战之90行代码写个猜数字游戏

    一.导入库 import random import time 二.注册用户 我们用变量与input实现 name = str(input('请输入用户名:')) print('欢迎您,'+name) 三.注册年龄 这里我们得用except制作乱输文本就游戏结束的程序 乱输文本就结束 try: age = int(input('请输入年龄:')) except ValueError: print('非法输入') age = 30000 顺便把年龄设为30000[滑稽] 再根据年龄大小分配金币 四

  • Python实战之画哆啦A梦(超详细步骤)

    一.写在前面 本文基于64位windows系统(鼠标右键点击桌面"此电脑"图标--属性可查看电脑系统版本).python3.x(pycharm自动安装的版本, 3.0以上).文中代码内容所使用的工具是pycharm-community-2020.1,实践中如有碰到问题,可留言提问. 前阵子有看到zh上有大神画了这个哆啦A梦的大头贴,自己也来试了一下,很简单,但长篇整段的代码对刚刚学会海龟绘图语法的初学者来说还是有一定难度,所以来做一个拆解版详细步骤讲解实现. 二.效果图 言归正传,先上

  • Python实战之用tkinter库做一个鼠标模拟点击器

    前言 用Python做一个鼠标模拟点击器,可以实现多位置,定时,定次数,定区域随机位置点击,对于一些比较肝的游戏(痒痒鼠之类的),挂机非常有帮助,解放双手;定区域随机点击可以一定程度上防止系统检测出有使用脚本开挂的行为 import tkinter as tk import random import pyautogui as mouse from tkinter.messagebox import * 安装库 首先是今天要用到的几个必要的库:tkinter,random,pyautogui 没

随机推荐