Я чрезвычайно новичок в объектно-ориентированном программировании и пытаюсь начать обучение на 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 CARDS и карты MONEY. Карты действий выполняют разные действия, карты свойств принадлежат разным наборам цветов, а карты денег могут иметь разные значения. Кроме того, карты свойств могут быть «подстановочными знаками» и могут использоваться как часть одного из двух наборов. Наконец, каждая карта также имеет эквивалентную денежную стоимость (указывается в верхнем углу каждой карты). В арендных картах действия карта может применяться только к цвету, указанному на карте.
Мой вопрос заключается в том, как справиться с подобной ситуацией, и как было бы неплохо включить эти разные карты в программу на языке Python? Должен ли я сохранить свой единственный PlayingCard()
класс, и просто иметь много входов, таких как PlayingCard(type="PROPERTY", value="3M")
. Или было бы лучше создать отдельные классы, такие как ActionPlayingCard()
, PropertyPlayingCard()
и т. Д.? Или есть лучший способ? Как я уже сказал, я нахожусь в начале своего обучения здесь, и как организовать эти типы ситуаций с точки зрения дизайна более высокого уровня.
Большое спасибо.