对一副扑克进行发牌,并且判断牌面的结果
代码实现:Poker.py
# coding=utf-8
from random import randint, random,shuffle
#扑克类
class Poker():
def __init__(self, color, number):
# 颜色1,2,3,4,代表红心,黑心,方块,梅花
self.color = color
# 花色1-13:A,2,3,4,5,6,7,8,9,10,J,Q,K
self.number = number
#进行游戏得类
class Game():
# 初始化一副有序的扑克
def __init__(self):
self.pokers = []
self.color_dict = [" ", "红心", "黑心", "方块", "梅花"]
#为了更好判断皇家同花顺,把A放最后
self.number_dict = [' ', ' ', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K','A']
for c in range(1, 5):
for n in range(2, 15):
poker = Poker(c, n)
# 添加到0-len的位置
self.pokers.append(poker)
#----------------输出类------------------
# 输出洗好牌后的牌
def output_poker(self):
index = 1
for p in self.pokers:
color = self.color_dict[p.color]
number = self.number_dict[p.number]
print(f"{index}:{color}{number}")
index += 1
#输出一幅指定扑克牌面
def output_poker(self,my_poker):
index = 1
for p in my_poker:
color = self.color_dict[p.color]
number = self.number_dict[p.number]
print(f"{index}:{color}{number}")
index += 1
#-----------------功能类-------------------
#洗牌
def shuffle(self):
shuffle(self.pokers)
# 发牌功能
def deal(self):
my_pokers = []
count=0
#打乱好顺序,直接发前五张就可以了
self.shuffle()
for poker in self.pokers:
if(count==5):
break
my_pokers.append(poker)
count+=1
return my_pokers
#判断是否是一个颜色
def is_same_color(self,my_pokers):
count=0
color=my_pokers[0].color
for poker in my_pokers:
if(color==poker.color):
count+=1
else:
count=0
color=poker.color
return count==5
def get_straight_len(self,count):
tem_len=0
#记录最长顺子的长度
straight_len=0
for n in count:
if(n==0):
tem_len=0
else:
tem_len+=1
straight_len=max(straight_len,tem_len)
return straight_len
#检查牌面
def check(self,my_pomker):
#计算每种牌分别有多少个
count=[0]*15
#判断是否有数量为i的牌
is_have=[0]*5
#计算出是否有同数字数量为3,4,5的牌
for poker in my_pomker:
i=poker.number
count[i]+=1
if count[i]==4:
is_have[4]+=1
elif count[i]==3:
is_have[3]+=1
elif count[i]==2:
is_have[2]+=1
#判断是否是同花
flag=self.is_same_color(my_pomker)
#计算顺子长度
straight_len=self.get_straight_len(count)
self.output_poker(my_pomker)
print()
#如果是同花
if flag:
if straight_len==5 and count[14]==1:
print("皇家同花顺")
self.output_poker(my_pomker)
else:
print("同花")
else:
if straight_len==5:
print("顺子")
self.output_poker(my_pomker)
#到这里,已经不是顺子,又不是同花,接下俩对牌数进行判断
else:
if is_have[4]:
print("四条")
self.output_poker(my_pomker)
elif is_have[3]:
if is_have[2]==2:
print("满堂红")
else:
print("三条")
#对子要判断有一对还是两队
elif is_have[2]:
if is_have[2]==2:
print("两对")
else:
print("一对")
else:
print("普通牌")
if __name__ == "__main__":
game = Game()
my_poker=game.deal()
game.check(my_poker)