首先,我们需要定义一个类,然后创建一副牌,最后实现一些基本的功能
- 定义扑克牌类:
class Card:
def __init__(self, suit, rank):
self.suit = suit
self.rank = rank
def __repr__(self):
return f"{self.rank} of {self.suit}"
- 创建一副扑克牌:
suits = ["Hearts", "Diamonds", "Clubs", "Spades"]
ranks = ["2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"]
deck = [Card(suit, rank) for suit in suits for rank in ranks]
- 实现洗牌功能:
import random
def shuffle_deck(deck):
random.shuffle(deck)
- 实现发牌功能:
def deal_cards(deck, num_players, num_cards):
hands = [[] for _ in range(num_players)]
for i in range(num_cards):
for hand in hands:
hand.append(deck.pop())
return hands
- 测试程序:
shuffle_deck(deck)
hands = deal_cards(deck, 4, 5)
for i, hand in enumerate(hands):
print(f"Player {i + 1}'s hand: {hand}")
6.可以添加对子、顺子、同花等牌型的检测
- 在Card类中添加辅助方法:
def is_pair(self, other):
return self.rank == other.rank
def is_straight(self, other):
ranks = sorted([self.rank, other.rank])
return ranks[1] - ranks[0] == 1 or (ranks[0] == "A" and ranks[1] == "2")
def is_flush(self, other):
return self.suit == other.suit
- 修改compare_hands函数以检测对子、顺子和同花:
value1 = sum(card.get_value() for card in hand1)
value2 = sum(card.get_value() for card in hand2)
if value1 > value2:
return "Hand 1 wins"
elif value1 < value2:
return "Hand 2 wins"
else:
# Check for pairs, straights, and flushes
for i in range(len(hand1)):
for j in range(i + 1, len(hand1)):
if hand1[i].is_pair(hand1[j]):
return "Hand 1 wins with a pair"
if hand1[i].is_straight(hand1[j]):
return "Hand 1 wins with a straight"
if hand1[i].is_flush(hand1[j]):
return "Hand 1 wins with a flush"
for i in range(len(hand2)):
for j in range(i + 1, len(hand2)):
if hand2[i].is_pair(hand2[j]):
return "Hand 2 wins with a pair"
if hand2[i].is_straight(hand2[j]):
return "Hand 2 wins with a straight"
if hand2[i].is_flush(hand2[j]):
return "Hand 2 wins with a flush"
return "It's a tie"
7.添加对子、顺子、同花等牌型的检测
- 在Card类中添加一个方法来判断牌型:
def get_value(self):
if self.rank in ["J", "Q", "K"]:
return 10
elif self.rank == "A":
return 11
else:
return int(self.rank)
- 创建一个函数来比较两个手牌的牌型:
value1 = sum(card.get_value() for card in hand1)
value2 = sum(card.get_value() for card in hand2)
if value1 > value2:
return "Hand 1 wins"
elif value1 < value2:
return "Hand 2 wins"
else:
return "It's a tie"
- 测试比较牌型的函数:
python复制代码hand1 = [Card("Hearts", "5"), Card("Diamonds", "6")]
hand2 = [Card("Clubs", "7"), Card("Spades", "8")]
print(compare_hands(hand1, hand2)) # 输出 "Hand 2 wins"
这样一个扑克牌小游戏就完成了,也可以根据游戏规则调整得分计算方式。
标签:return,Python,self,rank,Hand,一个,小游戏,hand1,hand2 From: https://blog.51cto.com/u_17021771/12032295