模拟一个斗地主发牌程序,使用Python实现对三个玩家进行手牌的派发。
import random
# 定义扑克牌类
class PokerCard:
def __init__(self, rank, suit):
self.rank = rank # 点数
self.suit = suit # 花色
# 返回牌的显示名称
def __str__(self):
return f"{self.suit}{self.rank}"
# 定义牌的排序规则
def __lt__(self, other):
rank_order = '345678910JQKA2' # 定义点数大小
suit_order = {'♠': 4, '♥': 3, '♦': 2, '♣': 1} # 定义花色大小
# 处理大小王的比较
if self.rank in ['小王', '大王'] or other.rank in ['小王', '大王']:
if self.rank == '大王':
return False # 大王最大
elif other.rank == '大王':
return True
elif self.rank == '小王':
return False # 小王次大
elif other.rank == '小王':
return True
if self.rank == other.rank:
return suit_order[self.suit] > suit_order[other.suit]
return rank_order.index(self.rank) < rank_order.index(other.rank)
# 定义发牌类
class DouDiZhu:
def __init__(self):
self.suits = ['♠', '♥', '♦', '♣'] # 花色
self.ranks = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2'] # 点数
self.deck = self.create_deck() # 生成一副牌
self.landlord_cards = [] # 地主牌
self.players = {'A': [], 'B': [], 'C': []} # 玩家手牌
# 生成扑克牌
def create_deck(self):
deck = [PokerCard(rank, suit) for suit in self.suits for rank in self.ranks]
deck += [PokerCard('小王', ''), PokerCard('大王', '')] # 添加大小王
return deck
# 洗牌
def shuffle(self):
random.shuffle(self.deck)
# 发牌
def deal(self):
self.players['A'] = sorted(self.deck[:17])
self.players['B'] = sorted(self.deck[17:34])
self.players['C'] = sorted(self.deck[34:51])
self.landlord_cards = sorted(self.deck[51:])
# 打印玩家手牌
def show_hands(self, player_name=None):
if player_name:
print(f"{player_name}:{' '.join(map(str, self.players[player_name]))}")
else:
for player in self.players:
print(f"{player}:{' '.join(map(str, self.players[player]))}")
# 打印地主牌
def show_landlord_cards(self):
print(f"地主牌:{' '.join(map(str, self.landlord_cards))}")
# 主函数
def main():
print("********** 欢迎进入 XX 斗地主 **********")
player_a = input("请输入玩家姓名:")
player_b = input("请输入玩家姓名:")
player_c = input("请输入玩家姓名:")
game = DouDiZhu()
print("洗牌中...")
game.shuffle()
print("洗牌完成!")
print("发牌中...")
game.deal()
print("发牌完成!")
print(f"{player_a}:{' '.join(map(str, game.players['A']))}")
print(f"{player_b}:{' '.join(map(str, game.players['B']))}")
print(f"{player_c}:{' '.join(map(str, game.players['C']))}")
landlord = input("谁叫地主? ")
game.show_landlord_cards()
if landlord == player_a:
game.players['A'] += game.landlord_cards
game.players['A'].sort()
elif landlord == player_b:
game.players['B'] += game.landlord_cards
game.players['B'].sort()
elif landlord == player_c:
game.players['C'] += game.landlord_cards
game.players['C'].sort()
print(f"{player_a}:{' '.join(map(str, game.players['A']))}")
print(f"{player_b}:{' '.join(map(str, game.players['B']))}")
print(f"{player_c}:{' '.join(map(str, game.players['C']))}")
if __name__ == "__main__":
main()