python实现斗地主(发牌、展示牌)
import random # 定义类 class Poker(): # 定义扑克 poke = [] # 玩家的手牌 playerOne = [] playerTwo = [] playerThree = [] # 底牌 holeCards = [] # 初始化类时需要传递两个参数, def __init__(self, num, flower): self.num = num self.flower = flower # 重写方法,当调用Poker.poke时,相当于调用此方法 def __str__(self) -> str: return f'{self.flower}{self.num}' @classmethod # 可以通过类名调用,在类加载时初始化 def prepareCards(cls): # 王 king = ['大王', '小王'] # 花色 flower = ['♥', '♣', '♦', '♠'] # 牌 num = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', "2"] # 双重循环,使用列表的追加方法,将牌添加到Poker里面,实际上是调用了Poker的__init__方法 for n in num: for f in flower: # cls相当于Poker cls.poke.append(Poker(n, f)) # 将王追加到扑克中 cls.poke.append(king[0]) cls.poke.append(king[1]) @classmethod # 洗牌方法 def shuffle(cls): # 调用random包里面的shuffle方法,无返回值 return None random.shuffle(cls.poke) @classmethod # 发牌 def deal(cls): # 将已经打乱的牌,进行循环发牌,理解着就是一次发17张,因为索引是从0开始,所以start = 0 for i in range(0, 54): if i < 17: # print(i) cls.playerOne.append(cls.poke[i]) # 将17到34这牌发给玩家2 if 17 <= i < 34: # print(i) cls.playerTwo.append(cls.poke[i]) if 34 <= i < 51: # print(i) cls.playerThree.append(cls.poke[i]) # 底牌 if i >= 51: cls.holeCards.append(cls.poke[i]) @classmethod def showPoke(cls): print('玩家1的牌:') for i in cls.playerOne: print(f'{i}', end=' ') print() print('玩家2的牌:') for i in cls.playerTwo: print(f'{i}', end=' ') print() print('玩家3的牌:', end='\n') for i in cls.playerThree: print(f'{i}', end=' ') print() print("底牌") for i in cls.holeCards: print(i, end=' ') # 初始化 Poker.prepareCards() # 打乱牌 Poker.shuffle() # # 发牌 Poker.deal() # # 展示牌 Poker.showPoke()