python代码实现拍纸牌游戏

准备一副标准的扑克牌(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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值