为比普通卡组中的纸牌类型更复杂的纸牌类型制作类的好方法吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为比普通卡组中的纸牌类型更复杂的纸牌类型制作类的好方法吗?相关的知识,希望对你有一定的参考价值。

[请多多包涵-我对面向对象编程非常陌生,并且正在尝试通过制作简单的纸牌游戏(似乎很传统!)来开始使用python学习。我已经完成了下面的示例,该示例很好用,并教会我有关制作PlayingCard()类的多个实例以创建Deck()类的实例的方法:

class PlayingCard(object):
    def __init__(self, suit, val):
        self.suit = suit
        self.value = val

    def print_card(self):
        print(" of ".format(self.value, self.suit))

class Deck(object):
    def __init__(self):
        self.playingcards = []
        self.build()

    def build(self):
        for s in ["Spades", "Clubs", "Diamonds", "Hearts"]:
            for v in range(1,14):
                self.playingcards.append(PlayingCard(s,v))

deck = Deck()

我现在想用更复杂的卡做一些事情,而不仅仅是一个标准的52副牌(具有很好的递增值)。我想到的套牌是大富翁纸牌游戏:

enter image description here

[卡有3种基本类型-动作卡,物业卡和货币卡。操作卡执行不同的操作,属性卡属于不同的颜色集,而货币卡可以具有不同的值。此外,属性卡可以是“通配符”,并且可以用作两个集合之一的一部分。最后,每张卡还具有同等的货币价值(在每张卡的左上角指示)。在租金行动卡中,该卡只能应用于卡上指示的颜色属性。

我的问题通常是如何处理这种情况,将这些不同的卡包含在基于类的python程序中的一种好方法是什么?我应该保留我的单个PlayingCard()类,并且只有很多输入,例如PlayingCard(type="PROPERTY", value="3M")。还是创建单独的类(例如ActionPlayingCard()PropertyPlayingCard()等)会更好?或者,还有更好的方法?就像我说的那样,我正在这里开始学习,以及如何根据更高级别的设计来组织这类情况。

非常感谢。

答案

这些就是我们所谓的“设计决策”。通常,“正确”的方法只是一个见解。作为一个初学者,我认为尝试这两种实现以了解它们如何工作将是有益的。无论您选择哪一种,都将需要取舍。您必须决定哪些权衡最重要。当您获得更多经验时,将会做出此类决策。

另一答案

您可以使用继承。在这里,您可以创建一个主类,然后具有子类,这些子类仍包含来自父类的函数和值,但是对于该特定类也可以具有额外的值和函数。

class Apple:
    def __init__(self, yearMade):
        pass

    def ring(self):
        print('ring ring')

class iPhone(Apple):
    def __init__(self, number)
        number = number

    def func():
        pass

现在,iPhone类具有与Apple类相同的功能,并且具有自己的功能。如果您想了解有关继承的更多信息,建议您做一些研究。

以上是关于为比普通卡组中的纸牌类型更复杂的纸牌类型制作类的好方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 和 Kivy 的小型纸牌游戏

java题目 小明左右手分别拿两张纸牌 黑桃10和红心8, 现在交换手中的牌 用程序模拟这一过程

简单21点纸牌小游戏纸牌显示的修改

当pygame达到某种情况时如何停止定时器

PanGesture 和 Tap Gesture 之间的冲突

有人可以帮我在pygame中为扑克游戏创建一副纸牌吗