参考链接: Python程序可随机播放纸牌
案例:4名牌手打牌,计算机随机将52张牌(不含大小王)发给4名牌手,并在屏幕上显示每位牌手的牌。
Card类:代表一张牌,FaceNum指牌面数字,Suit指花色;Hand类:代表一手牌,可以增加,清空手里的牌;Poke类:代表一副牌,deal指发牌。
class Card():
"""A playing card."""
RANKS = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
SUITS = ['梅', '方', '红', '黑']
def __init__(self, rank, suit, face_up=True):
self.rank = rank
self.suit = suit
self.is_face_up = face_up # 是否显示牌的正面
def __str__(self): # 重写print方法,打印一张牌的信息
if self.is_face_up:
rep = self.suit self.rank
else:
rep = 'XX'
return rep
def pic_order(self): # 牌的顺序号
if self.rank == 'A':
FaceNum = 1
elif self.rank == 'J':
FaceNum = 11
elif self.rank == 'Q':
FaceNum = 12
elif self.rank == 'K':
FaceNum = 13
else:
FaceNum = int(self.rank)
if self.suit == '梅':
Suit = 1
elif self.suit == '方':
Suit = 2
elif self.suit == '红':
Suit = 3
else:
Suit = 4
return (Suit-1) * 13 FaceNum
def flip(self): # 翻牌方法
self.is_face_up = not self.is_face_up
class Hand():
"""A hand of playing cards"""
def __init__(self):
self.cards = [] # cards列表变量存储牌手中的牌
def __str__(self):
if self.cards:
rep = ''
for card in self.cards:
rep = str(card) 't'
else:
rep = '无牌'
return rep
def clear(self): # 清空手里的牌
self.cards = []
def add(self, card): # 增加牌
self.cards.append(card)
def give(self, card, other_hand): # 把一张牌给其他牌手
self.cards.remove(card)
other_hand.add(card)
class Poke(Hand):
"""A deck of playing cards."""
def populate(self): # 生成一副牌
for suit in Card.SUITS:
for rank in Card.RANKS:
self.add(Card(rank, suit))
def shuffle(self): # 洗牌
import random
random.shuffle(self.cards) # 打乱牌的顺序
def deal(self, hands, per_hand=13): # 发牌,发给玩家,每人默认13张牌
for rounds in range(per_hand):
for hand in hands:
if self.cards:
top_card=self.cards[0]
self.cards.remove(top_card)
hand.add(top_card)
# self.give(top_card, hand) # 上面的两句可以用这一句代替
else:
print('牌已发完!')
if __name__ == "__main__":
print('扑克发牌开始:')
# 4个玩家
players = [Hand(), Hand(), Hand(), Hand()]
poke1 = Poke()
poke1.populate() # 生成一副牌
poke1.shuffle() # 洗牌
poke1.deal(players, 13) # 发给每个玩家13张牌
# 显示4位牌手的牌
n = 1
for hand in players:
print('牌手', n, end=':')
print(hand)
n = n 1
input('n Press the enter key to exit.')
程序执行结果如下图: