准备一副标准的扑克牌(52张),去掉大小王。 将扑克牌洗混后,平均分配给两名玩家,每人得到26张牌。 两名玩家各自将手中的牌按照花色和点数从小到大排序。 从一名玩家开始,轮流出牌。每位玩家只能出一张牌,且必须比上一位玩家出的牌大。例如,如果上一位玩家出了红桃7,那么下一位玩家只能出红桃8或更大的牌。 如果某位玩家无法出牌,则该玩家输掉比赛。 当其中一位玩家出完所有的牌时,另一位玩家获胜。
代码说明
生成扑克牌: create_deck()函数生成一副标准的扑克牌。
洗牌与发牌: deal_cards()函数将牌洗混后,平均分配给两名玩家。
排序: sort_hand()函数按照花色和点数对手中的牌进行排序。
出牌逻辑: play_card()函数实现玩家出牌的逻辑,确保出牌比上一张牌大。
游戏主流程: main()函数控制游戏的主流程,包括轮流出牌、判断胜负等。
游戏流程
游戏开始时,两名玩家从一副牌中各抽取26张牌,并将牌按规则排序。
玩家轮流出牌,每次出牌必须比上一张牌大。
如果某位玩家无法出牌,该玩家输掉比赛。
如果某位玩家出完所有的牌,则另一位玩家输掉比赛。
import random
# 定义扑克牌的花色和点数
suits = ['Hearts', 'Diamonds', 'Clubs', 'Spades']
ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
# 生成一副标准的扑克牌
def create_deck():
return [f'{rank} of {suit}' for suit in suits for rank in ranks]
# 洗牌并分发给两名玩家
def deal_cards(deck):
random.shuffle(deck)
return deck[:26], deck[26:]
# 将牌的点数转换为排序所需的数值
def rank_value(card):
rank = card.split(' ')[0]
return ranks.index(rank)
# 按照花色和点数排序
def sort_hand(hand):
return sorted(hand, key=lambda card: (suits.index(card.split(' ')[2]), rank_value(card)))
# 出牌函数
def play_card(player_hand, last_card):
for card in player_hand:
if card.split(' ')[2] == last_card.split(' ')[2] and rank_value(card) > rank_value(last_card):
return card
if card.split(' ')[2] != last_card.split(' ')[2] and rank_value(card) > rank_value(last_card):
return card
return None
def main():
deck = create_deck()
player1_hand, player2_hand = deal_cards(deck)
# 玩家手牌排序
player1_hand = sort_hand(player1_hand)
player2_hand = sort_hand(player2_hand)
last_card = '2 of Hearts' # 初始状态下的上一张牌是最小的牌
current_player = 1 # 1代表玩家1,2代表玩家2
while player1_hand and player2_hand:
if current_player == 1:
card_to_play = play_card(player1_hand, last_card)
if card_to_play:
print(f"Player 1 plays {card_to_play}")
player1_hand.remove(card_to_play)
last_card = card_to_play
current_player = 2
else:
print("Player 1 cannot play a card and loses!")
print("Player 2 wins!")
return
else:
card_to_play = play_card(player2_hand, last_card)
if card_to_play:
print(f"Player 2 plays {card_to_play}")
player2_hand.remove(card_to_play)
last_card = card_to_play
current_player = 1
else:
print("Player 2 cannot play a card and loses!")
print("Player 1 wins!")
return
# 检查是否有玩家出完所有牌
if not player1_hand:
print("Player 1 has won by playing all cards!")
print("Player 2 loses!")
elif not player2_hand:
print("Player 2 has won by playing all cards!")
print("Player 1 loses!")
if __name__ == "__main__":
main()