Ich bin extrem neu in der objektorientierten Programmierung und versuche, mit einem einfachen Kartenspiel (wie es traditionell zu sein scheint!) In Python zu lernen. Ich habe das folgende Beispiel ausgeführt, das einwandfrei funktioniert, und mir beigebracht, wie Sie mehrere Instanzen der PlayingCard()
Klasse erstellen, um eine Instanz der Klasse zu erstellen 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()
Ich möchte jetzt etwas mit komplexeren Karten machen, nicht nur mit einem Standard-52-Deck (das schön inkrementierende Werte hat). Das Deck, an das ich denke, ist das Monopoly-Kartenspiel:
Es gibt 3 grundlegende Kartentypen: AKTIONSKARTEN, IMMOBILIENKARTEN und GELDKARTEN. Die Aktionskarten führen unterschiedliche Aktionen aus, die Eigenschaftskarten gehören zu verschiedenen Farbsätzen und die Geldkarten können unterschiedliche Werte haben. Zusätzlich können die Eigenschaftskarten "Platzhalter" sein und als Teil eines von zwei Sätzen verwendet werden. Schließlich hat jede Karte auch einen entsprechenden Geldwert (in der oberen Ecke jeder Karte angegeben). In den Mietaktionskarten kann die Karte nur für die auf der Karte angegebene Farbeigenschaft gelten.
Meine Frage ist nur allgemein, wie man mit einer solchen Situation umgeht und wie man diese verschiedenen Karten in ein klassenbasiertes Python-Programm aufnehmen kann. Sollte ich meine einzelne PlayingCard()
Klasse behalten und nur viele Eingaben haben, wie z PlayingCard(type="PROPERTY", value="3M")
. Oder wäre es besser, separate Klassen erstellen wie ActionPlayingCard()
, PropertyPlayingCard()
, etc? Oder gibt es einen besseren Weg? Wie gesagt, ich stehe hier am Anfang meines Lernens und wie man solche Situationen im Hinblick auf das Design auf höherer Ebene organisiert.
Danke vielmals.