python實(shí)戰(zhàn)之德州撲克第二步-判斷牌型
一、前言
現(xiàn)在到了,第二步,上一步我們已經(jīng)做好了發(fā)牌模塊,有了手牌,就需要判斷牌型了,平時(shí)打撲克時(shí),我們需要使用大腦進(jìn)行判斷自己手里的牌屬于那種類型的,現(xiàn)在我們需要通過(guò)程序來(lái)進(jìn)行判斷!
在以下操作中,需要玩家手里的牌為五張,不然無(wú)法判斷!
先給出發(fā)牌的一個(gè)效果圖:
給2人發(fā)五張牌:
二、分析
通過(guò)觀察可以看出每名玩家的牌是以字符串的形式存儲(chǔ)的,每張牌的字符串長(zhǎng)度時(shí)3(?。。。?/p>
判斷牌型就需要熟悉牌型的組成了
皇家同花順:同一花色最大的順子 同花順:同一花色的順子 四條:四張相同+1個(gè)單張 葫蘆:三張相同+1對(duì) 同花:5張牌花色相同 順子:花色不同的順子 三條:三張相同+2單張 兩對(duì):2對(duì)+1單 一對(duì):1對(duì)+3單張 高牌:五個(gè)單張牌
我們把牌型分為兩類,同花的{皇家同花順,同花順,同花},其余的為非同花
接下來(lái)就先需要判斷是否為同花,然后在具體判斷,例如皇家同花順,只有一種類型,直接判斷即可,其余的可看下方!
事不宜遲,上手操作!
三、敲代碼
這里我們得先知道,玩家的花色,每張牌占三個(gè)字符串,花色占一個(gè),牌值占兩個(gè),我們是不是可以通過(guò)分片操作,把花色提取出來(lái),保存到一個(gè)列表中尼!方便操作!
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
代碼中又出現(xiàn)了深拷貝這個(gè)函數(shù),具體作用上一篇文章已經(jīng)講過(guò)了,不再重復(fù)!
大概流程: 首先深拷貝,含有玩家牌的二維數(shù)組 雙重循環(huán)提取花色,就得到了一個(gè)僅含花色的二位列表且對(duì)應(yīng)的玩家沒(méi)有改變
然后就是判斷花色是不是一樣
def color_analysis(Color):#是否為同色,傳入一維花色列表 f="false"#同花 t="true"#非同花 col=len(set(Color)) if col>1: return f else:return t def color_type(CO):#存儲(chǔ)花色是否一樣 是: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
通過(guò)兩個(gè)函數(shù)進(jìn)行判斷,使用到了set()去重,如果去重之后為1,則為同花,不唯1則不為同花
我們判斷好了是否為同花,接下來(lái)就是判斷牌值了,首先需要取牌值,思路和取花色一樣的,就不貼代碼了,取值之后,因?yàn)楹蠮,Q,K,A,我們需要特殊處理一下,我們把A替換為14,K替換為13,以此類推J為11,特殊處理之后得到的是字符型的值,我們還需要整型化,為了方便比較,還需要進(jìn)行排序操作
一下只貼出部分代碼,已經(jīng)有了思路,相信你可以把代碼補(bǔ)全!
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
經(jīng)過(guò)以上操作,我們得到了玩家是手里的牌是否為同花及其牌值,且順序是對(duì)應(yīng)的
然后就是比較了,思路上面已經(jīng)給出了,給出關(guān)鍵代碼:
def judge_card_type(value,Color_type):#value為一個(gè)玩家的牌值須按照從大到小排好序,color為對(duì)應(yīng)的花色 result=0 num=0#牌值相同的個(gè)數(shù) if len(value)!=5: print("牌數(shù)不為五張或過(guò)多,無(wú)法判斷!") sys.exit() for A in range(0, len(value)):#統(tǒng)計(jì)相等的個(gè)數(shù) 或者是否為順子 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:#三條或兩隊(duì) 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"#兩隊(duì) elif num==1:#一對(duì) return "8" else:return "9"#高牌
已經(jīng)知道花色,和牌值,只需要進(jìn)行簡(jiǎn)單的判斷即可,小編給出的方法比較普通,相信你們可以寫(xiě)出更好的!
四、總結(jié)
上面一段代碼,只是返回不同牌型對(duì)應(yīng)的數(shù)值,我們只需做一個(gè)簡(jiǎn)單的轉(zhuǎn)換即可,相信你可以做到,代碼中注釋也給出了對(duì)應(yīng)的牌型
點(diǎn)擊鏈接查看
python實(shí)戰(zhàn)之德州撲克第一步-發(fā)牌
python實(shí)戰(zhàn)之德州撲克第三步-比較大小
到此這篇關(guān)于python實(shí)戰(zhàn)之德州撲克第二步-判斷牌型的文章就介紹到這了,更多相關(guān)python實(shí)現(xiàn)德州撲克判斷牌型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python3爬蟲(chóng)中關(guān)于Ajax分析方法的總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于Python3爬蟲(chóng)中關(guān)于Ajax分析方法的總結(jié),需要的朋友們可以學(xué)習(xí)下。2020-07-07pandas.DataFrame Series排序的使用(sort_values,sort_index)
本文主要介紹了pandas.DataFrame Series排序的使用(sort_values,sort_index),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02python 圖像處理畫(huà)一個(gè)正弦函數(shù)代碼實(shí)例
這篇文章主要介紹了python 圖像處理畫(huà)一個(gè)正弦函數(shù)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09Python樹(shù)的平衡檢測(cè)算法實(shí)現(xiàn)
樹(shù)的平衡檢測(cè)是指判斷一棵樹(shù)是否為平衡二叉樹(shù),即每個(gè)節(jié)點(diǎn)的左右子樹(shù)高度差不超過(guò)1,本文主要介紹了Python樹(shù)的平衡檢測(cè)算法實(shí)現(xiàn),感興趣的可以了解一下2023-11-11python3用urllib抓取貼吧郵箱和QQ實(shí)例
在本篇文章里小編給大家整理了關(guān)于python3中運(yùn)用urllib抓取貼吧的郵箱以及QQ的實(shí)例內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-03-03