Jestem zupełnie nowy w programowaniu obiektowym i staram się uczyć w Pythonie, tworząc prostą grę karcianą (jak się wydaje tradycyjną!). Zrobiłem następujący przykład, który działa dobrze i uczy mnie tworzenia wielu instancji PlayingCard()
klasy w celu utworzenia instancji Deck()
klasy:
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()
Chcę zrobić coś teraz z bardziej złożonymi kartami, a nie tylko ze standardową talią 52 (która ma ładnie rosnące wartości). Talia, o której myślę, to gra karciana Monopoly:
Istnieją 3 podstawowe typy kart - karty AKCJA, karty WŁASNOŚCI i karty PIENIĄDZE. Karty akcji wykonują różne akcje, karty własności należą do różnych zestawów kolorów, a karty pieniężne mogą mieć różne wartości. Dodatkowo karty właściwości mogą być „symbolami wieloznacznymi” i mogą być używane jako część jednego z dwóch zestawów. Wreszcie, każda karta ma również równoważną wartość pieniężną (wskazaną w górnym rogu każdej karty). W czynszowych kartach akcji karta może odnosić się tylko do właściwości koloru wskazanej na karcie.
Moje pytanie brzmi, jak poradzić sobie z taką sytuacją i jaki byłby fajny sposób na włączenie tych różnych kart do opartego na klasach programu python? Powinienem zachować moją pojedynczą PlayingCard()
klasę i mieć po prostu wiele danych wejściowych, takich jak PlayingCard(type="PROPERTY", value="3M")
. Czy byłoby lepiej, aby utworzyć oddzielne klasy, takie jak ActionPlayingCard()
, PropertyPlayingCard()
itp? Czy jest jakiś lepszy sposób? Jak mówię, jestem na początku nauki tutaj i jak organizować tego rodzaju sytuacje w zakresie projektowania wyższego poziomu.
Wielkie dzięki.