solitare/playingcard.h
ItsDrike 868699979d
Improve PlayingCard class
- Move to using enums to represent the suit & value
- This changes the badly named color to more appropriate suit.
- Add createDeck static method
2024-12-01 21:17:45 +01:00

72 lines
1.5 KiB
C++

#ifndef PLAYINGCARD_H
#define PLAYINGCARD_H
#include <QObject>
class PlayingCard : public QObject
{
Q_OBJECT
Q_ENUMS(Value)
Q_ENUMS(Suit)
Q_PROPERTY(Suit suit READ suit WRITE setSuit NOTIFY onSuitChanged REQUIRED)
Q_PROPERTY(Value value READ value WRITE setValue NOTIFY onValueChanged REQUIRED)
Q_PROPERTY(bool isFaceDown READ isFaceDown WRITE setIsFaceDown NOTIFY onIsFaceDownChanged)
Q_PROPERTY(QString valueString READ valueString NOTIFY onValueChanged)
Q_PROPERTY(QString suitString READ suitString NOTIFY onSuitChanged)
public:
enum Value {
Ace = 1,
Two = 2,
Three = 3,
Four = 4,
Five = 5,
Six = 6,
Seven = 7,
Eight = 8,
Nine = 9,
Ten = 10,
Jack = 11,
Queen = 12,
King = 13,
};
enum Suit {
Clubs,
Diamonds,
Hearts,
Spades,
};
explicit PlayingCard(const Suit &suit = Suit::Clubs, const Value &value = Value::Ace, bool isFaceDown = false, QObject *parent = nullptr);
Suit suit() const;
QString suitString() const;
void setSuit(const Suit &suit);
Value value() const;
QString valueString() const;
void setValue(const Value &value);
bool isFaceDown() const;
void setIsFaceDown(bool faceDown);
static QList<PlayingCard*> createDeck();
signals:
void onSuitChanged();
void onValueChanged();
void onIsFaceDownChanged();
private:
Suit m_suit;
Value m_value;
bool m_isFaceDown;
QString m_imgUrl;
};
#endif // PLAYINGCARD_H