面向对象设计应用------发牌游戏

淺唱寂寞╮ 提交于 2020-03-09 14:23:09

开发工具:pycharm

游戏介绍:四名牌手打牌,电脑随机将52张牌(不含大,小王)发给四名牌友,并将在屏幕上显示每位牌手的牌

程序设计步骤

1.设计类(Card,Hand,Poke)

2.主程序

一,设计类

1.Card

class Card():
    Ranks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]  # 牌面数字1-13
    Suits = ["梅", "方", "红", "黑"]  # 四个花色

    def __init__(self, rank, suit, face_up=True):
        self.rank = rank
        self.suit = suit
        self.is_face_up = face_up  # 是否显示牌正面,True为正面,Flase为背面

    def __str__(self):
        if self.is_face_up:
            rep = self.suit + self.rank
        else:
            rep = "XX"
        return rep

    def flip(self):  # 翻牌方法
        self.is_face_up = not self.is_face_up

    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

2.Hand

class Hand():
    def __init__(self):
        self.cards = []

    def __str__(self):  # 重写print()方法
        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)

3.Poke

class Poke(Hand):

    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:
                top_card = self.cards[0]
                self.cards.remove(top_card)
                hand.add(top_card)

二,主程序

if __name__ == "__main__":
    print("This is a module with classes for playing cards.")

    players = [Hand(), Hand(), Hand(), Hand()]
    poke1 = Poke()
    poke1.populate()  # 生成一副牌
    poke1.shuffle()  # 洗牌
    poke1.deal(players, 13)  # 发给玩家每人13张

参考代码

class Card():
    Ranks = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]  # 牌面数字1-13
    Suits = ["梅", "方", "红", "黑"]  # 四个花色

    def __init__(self, rank, suit, face_up=True):
        self.rank = rank
        self.suit = suit
        self.is_face_up = face_up  # 是否显示牌正面,True为正面,Flase为背面

    def __str__(self):
        if self.is_face_up:
            rep = self.suit + self.rank
        else:
            rep = "XX"
        return rep

    def flip(self):  # 翻牌方法
        self.is_face_up = not self.is_face_up

    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


class Hand():
    def __init__(self):
        self.cards = []

    def __str__(self):  # 重写print()方法
        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):

    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:
                top_card = self.cards[0]
                self.cards.remove(top_card)
                hand.add(top_card)


if __name__ == "__main__":
    print("This is a module with classes for playing cards.")

    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("\nPress the enter key to exit.")

运行结果:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!