前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象_扑克牌发牌程序 (Python经典编程案例)

面向对象_扑克牌发牌程序 (Python经典编程案例)

作者头像
用户7886150
修改2021-01-28 10:06:04
1.4K0
修改2021-01-28 10:06:04
举报
文章被收录于专栏:bit哲学院

参考链接: Python程序可随机播放纸牌

案例:4名牌手打牌,计算机随机将52张牌(不含大小王)发给4名牌手,并在屏幕上显示每位牌手的牌。 

Card类:代表一张牌,FaceNum指牌面数字,Suit指花色;Hand类:代表一手牌,可以增加,清空手里的牌;Poke类:代表一副牌,deal指发牌。 

class Card():

    """A playing card."""

    RANKS = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']

    SUITS = ['梅', '方', '红', '黑']

    def __init__(self, rank, suit, face_up=True):

        self.rank = rank

        self.suit = suit

        self.is_face_up = face_up  # 是否显示牌的正面

    def __str__(self):  # 重写print方法,打印一张牌的信息

        if self.is_face_up:

            rep = self.suit + self.rank

        else:

            rep = 'XX'

        return rep

    def pic_order(self):  # 牌的顺序号

        if self.rank == 'A':

            FaceNum = 1

        elif self.rank == 'J':

            FaceNum = 11

        elif self.rank == 'Q':

            FaceNum = 12

        elif self.rank == 'K':

            FaceNum = 13

        else:

            FaceNum = int(self.rank)

        if self.suit == '梅':

            Suit = 1

        elif self.suit == '方':

            Suit = 2

        elif self.suit == '红':

            Suit = 3

        else:

            Suit = 4

        return (Suit-1) * 13 + FaceNum

    def flip(self):  # 翻牌方法

        self.is_face_up = not self.is_face_up

class Hand():

    """A hand of playing cards"""

    def __init__(self):

        self.cards = []  # cards列表变量存储牌手中的牌

    def __str__(self):

        if self.cards:

            rep = ''

            for card in self.cards:

                rep += str(card) + '\t'

        else:

            rep = '无牌'

        return rep

    def clear(self):  # 清空手里的牌

        self.cards = []

    def add(self, card):  # 增加牌

        self.cards.append(card)

    def give(self, card, other_hand):  # 把一张牌给其他牌手

        self.cards.remove(card)

        other_hand.add(card)

class Poke(Hand):

    """A deck of playing cards."""

    def populate(self):  # 生成一副牌

        for suit in Card.SUITS:

            for rank in Card.RANKS:

                self.add(Card(rank, suit))

    def shuffle(self):  # 洗牌

        import random

        random.shuffle(self.cards)  # 打乱牌的顺序

    def deal(self, hands, per_hand=13):  # 发牌,发给玩家,每人默认13张牌

        for rounds in range(per_hand):

            for hand in hands:

                if self.cards:

                    top_card=self.cards[0]

                    self.cards.remove(top_card)

                    hand.add(top_card)

                    # self.give(top_card, hand)  # 上面的两句可以用这一句代替

                else:

                    print('牌已发完!')

if __name__ == "__main__":

    print('扑克发牌开始:')

    # 4个玩家

    players = [Hand(), Hand(), Hand(), Hand()]

    poke1 = Poke()

    poke1.populate()  # 生成一副牌

    poke1.shuffle()  # 洗牌

    poke1.deal(players, 13)  # 发给每个玩家13张牌

    # 显示4位牌手的牌

    n = 1

    for hand in players:

        print('牌手', n, end=':')

        print(hand)

        n = n + 1

    input('\n Press the enter key to exit.')

程序执行结果如下图:

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档