Ich entwerfe ein Kartenspiel (vom Typ Uno/Mau Mau) und überlege mir zwei Designoptionen. Hier sind sie. Sie sind sprachunabhängig (nicht in irgendeiner Programmiersprache geschrieben).Karten und Deck in einem Kartenspiel, erben oder nicht?
// option #1
class Card
{
int suit;
int value;
int flags; // for special cards, such as "cannot be answered, opponent takes two cards etc."
// some methods
}
class Deck
{
Card backsStack[maxCards];
Card facesStack[maxCards];
method shuffle()
{
...
}
method drawCards(int nr)
{
...
}
method addCardToBacks(Card toAdd)
{
...
}
method addCardToFaces(Card toAdd)
{
...
}
}
Hier ist die andere Option. In dieser Option gibt es eine Grundkarte und eine Mau Mau Card erbt von ihr. Es gibt ein Standardkartenspiel mit einem Stapel, der nur die Kartenrückseiten zeigt. Mau Mau Deck hat einen weiteren Stapel (zeigt die Gesichter der Karten). Das Problem, das ich hier sehen kann, ist, dass es möglich ist, Grundkarten zu einem Mau Mau Deck hinzuzufügen (das nur Mau Mau Karten enthalten sollte), da es den grundlegenden "Backs" Stapel vom Basisdeck geerbt hat.
// option #2
class Card
{
int suit;
int value;
// some methods
}
class MauMauCard : public Card
{
int flags; // for special cards, such as "cannot be answered, opponent takes two cards etc."
// some methods
}
class Deck
{
Card backsStack[maxCards];
method shuffle()
{
...
}
method drawCards(int nr)
{
...
}
method addCardToBacks(Card toAdd)
{
...
}
}
class MauMauDeck : public Deck
{
Card facesStack[maxCards];
method addCardToFaces(Card toAdd)
{
...
}
}
Welche Option sollte ich verwenden? Wie könnte ich es verbessern?
Vielen Dank im Voraus für Ihre Vorschläge!
Caroline
Vielleicht können Sie ein statisches Fabrikmuster verwenden, um ein Deck und passende Kartenobjekte abhängig vom Spiel zu erstellen. Auf diese Weise steuern Sie, welche Objekte von Deck und Karte Sie erstellen. – ahoxha