练习:用面向对象实现斗地主发牌的功能

这个示例展示了如何使用Python实现斗地主游戏的发牌功能。定义了Poker类来表示扑克牌,包含牌的数字、花色和价值。PokerGame类用于创建并洗牌,然后将牌分配给三位玩家。Player类则表示玩家,包括其状态(地主或平民)和手牌。最后,示例中创建了一个游戏实例,洗牌并分发牌,将地主的底牌给予玩家3,并对玩家的手牌进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习:用面向对象实现斗地主发牌的功能

import random


class Poker:
    nums = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2']
    colors = ['♠', '♥', '♣', '♦']

    def __init__(self, num, color):
        self.num = num
        self.color = color
        values = Poker.nums + ['joker', 'JOKER']
        self.value = values.index(self.num)

    def __repr__(self):
        return f'{self.color}{self.num}'

    @classmethod
    def create_cards(cls):
        pokers = [Poker(n, c) for n in cls.nums for c in cls.colors]
        pokers += [Poker('JOKER', '🃏'), Poker('joker', '🃏')]
        return pokers


class PokerGame:

    def __init__(self):
        self.pokers = Poker.create_cards()

    def shuffle(self):
        random.shuffle(self.pokers)

    def deal_cards(self):
        cards = iter(self.pokers)
        cards_1, cards_2, cards_3, cards_h = [], [], [], []
        for i in range(20):
            if i < 17:
                cards_1.append(next(cards))
                cards_2.append(next(cards))
                cards_3.append(next(cards))
            else:
                cards_h.append(next(cards))
        return cards_1, cards_2, cards_3, cards_h


class Player:

    def __init__(self, status='平民', pokers=None):
        self.status = status
        self.pokers = pokers

    def sort_cards(self):
        self.pokers = sorted(self.pokers, key=lambda card: card.value, reverse=True)

    def host(self, host_cards):
        self.status = '地主'
        self.pokers += host_cards
game = PokerGame()
game.shuffle()
cards_1, cards_2, cards_3, cards_h = game.deal_cards()

p1 = Player(pokers=cards_1)
p2 = Player(pokers=cards_2)
p3 = Player(pokers=cards_3)
p1.sort_cards()
p2.sort_cards()
p3.host(cards_h)
p3.sort_cards()


print(f'地主牌:{cards_h}')
print(f'玩家1:{p1.status}>>>{p1.pokers}')
print(f'玩家2:{p2.status}>>>{p2.pokers}')
print(f'玩家3:{p3.status}>>>{p3.pokers}')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值