一、前言
現在到了,第二步,上一步我們已經做好了發牌模塊,有了手牌,就需要判斷牌型了,平時打撲克時,我們需要使用大腦進行判斷自己手里的牌屬于那種類型的,現在我們需要通過程序來進行判斷!
在以下操作中,需要玩家手里的牌為五張,不然無法判斷!
先給出發牌的一個效果圖:
給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實現德州撲克判斷牌型內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- 基于Python制作一副撲克牌過程詳解
- Python用類實現撲克牌發牌的示例代碼
- python實現四人制撲克牌游戲
- python模擬實現分發撲克牌
- 華為校園招聘上機筆試題 撲克牌大小(python)
- Python實現比較撲克牌大小程序代碼示例
- python實戰之德州撲克第三步-比較大小