我对面向对象的编程非常陌生,并且正尝试通过制作简单的纸牌游戏(似乎很传统!)来开始使用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副牌(具有很好的递增值)。我想到的套牌是“大富翁”纸牌游戏:
卡共有3种基本类型-ACTION卡,PROPERTY卡和MONEY卡。操作卡执行不同的操作,属性卡属于不同的颜色集,而货币卡可以具有不同的值。此外,属性卡可以是“通配符”,并且可以用作两个集合之一的一部分。最后,每张卡还具有同等的货币价值(在每张卡的左上角指示)。在租赁行动卡中,该卡只能应用于卡上指示的颜色属性。
我的问题只是一般如何处理这种情况,在基于类的python程序中包括这些不同的卡的最佳方法是什么?我应该保持我的单一PlayingCard()
班级,并且只有很多输入,例如PlayingCard(type="PROPERTY", value="3M")
。还是会更好地创建单独的类,如ActionPlayingCard()
,PropertyPlayingCard()
等?或者,还有更好的方法?就像我说的那样,我正在这里开始学习,以及如何根据更高级别的设计来组织这类情况。
非常感谢。