游戏介绍: 四名牌手打牌,电脑随机將52张牌(不合大、小王)发给四名牌手,并在屏幕上显示每位牌手的牌。app
程序设计步骤:三个类 Card类、Hand类和Poke类dom
Card类函数
Card类表明一张牌,其中,FaceNum字段指的是牌面数字1~13,Suit字段指的是花色,”梅”为梅花,”方”为方块,”红”为红桃,”黑”为黑桃。ui
Card构造函数根据参数初始化封装的成员变量,实现牌面大小和花色的初始化,以及是否显示牌面,默认True为显示牌的正面 spa
1,Card构造函数根据参数初始化封装的成员变量,实现牌面大小和花色的初始化,以及是否显示牌面,默认True为显示牌正面;设计
2,_str_()方法时用来输出牌面大小和花色;blog
3,pic_order()方法获取牌的顺序号,牌面按梅花1~13,方块14- 26,红桃27-39,黑桃40- 52顺序编号(未洗牌以前),也就是说,梅花2顺序号为2,方块A顺序号为14,方块K顺序号为26;继承
4.flip()是翻牌方法,改变牌面是否显示的属性值。游戏
Hand类ip
Hand类表明一个玩家手里拿的牌,其中,cards列表变量存储牌手手中的牌。能够增长牌、清空手里的牌、把一张牌给别的牌手等操做。
Poke类
Poke类表明一副牌,一副牌看做是有52张牌的牌手,继承Hand类。因为其中cards列表变量要存储52张牌,并且要进行发牌、洗牌操做,因此增长 populate(self) 生成存储了52张牌的一手牌,存储在cards列表变量中 , random模块shuffle() 洗牌 , deal( self., hands,per_hand=13)可完成发牌动做 等方法。
参考代码:
class Card(): ''' A playing card.''' RANKS = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"] # 牌面数字 SUTTS = ["黑桃", "红心", "梅花", "方块"] 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 = 11 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): # 重写print()方法,打印出牌手的全部牌 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.SUTTS: 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) else: print("不能继续发牌了,牌已经发完!") if __name__ == "__main__": print("This is a module with classes for playing cards.") players = [Hand(), Hand(), Hand(), Hand()] poke1 = Poke() poke1.populate() # 生成一副牌 poke1.shuffle() # 洗牌 poke1.deal(players, 13) # 发牌 n = 1 for hand in players: print("牌手", n, end = ":") print(hand) n = n + 1 input("\nPress the enter key to exit.")
运行结果: