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