Sono estremamente nuovo nella programmazione orientata agli oggetti e sto cercando di iniziare ad imparare in Python realizzando un semplice gioco di carte (come sembra essere tradizionale!). Ho fatto il seguente esempio che funziona bene e mi insegna a creare più istanze della PlayingCard()
classe per creare un'istanza della Deck()
classe:
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()
Voglio fare qualcosa ora con carte più complesse, non solo un mazzo standard 52 (che ha valori gradevolmente incrementanti). Il mazzo che ho in mente è il gioco di carte Monopoli:
Esistono 3 tipi fondamentali di carte: carte AZIONE, CARTE DI PROPRIETÀ e carte SOLDI. Le carte azione eseguono azioni diverse, le carte proprietà appartengono a set di colori diversi e le carte denaro possono avere valori diversi. Inoltre, le carte proprietà possono essere "caratteri jolly" e possono essere utilizzate come parte di uno dei due set. Infine, ogni carta ha anche un valore monetario equivalente (indicato nell'angolo in alto di ogni carta). Nelle carte azione in affitto, la carta può essere applicata solo alla proprietà del colore indicata sulla carta.
La mia domanda è in genere come gestire una situazione come questa, e quale sarebbe un bel modo per includere queste diverse carte in un programma Python basato su classi? Dovrei mantenere la mia PlayingCard()
classe singola e avere solo molti input, come PlayingCard(type="PROPERTY", value="3M")
. O sarebbe meglio creare classi separate, come ActionPlayingCard()
, PropertyPlayingCard()
, ecc? O c'è un modo migliore? Come ho detto, sono all'inizio del mio apprendimento qui e su come organizzare questo tipo di situazioni in termini di progettazione di livello superiore.
Grazie molto.