#include <QGraphicsSceneMouseEvent>
#include <QPropertyAnimation>
+#include <QPainter>
+#include <QFont>
+#include <QFontMetrics>
+
+int PuzzleItem::moveCount_ = 0;
PuzzleItem::PuzzleItem(QGraphicsItem *parent) :
QGraphicsPixmapItem(parent)
{
movable_ = true;
moveAnimation_ = new QPropertyAnimation(this, "pos", this);
+ pieceNumber_ = 0;
+ drawNumber_ = true;
}
QPointF PuzzleItem::correctPlace() const
GameView::instance()->setEmptyPlace(tmp);
event->accept();
+ moveCount_++;
+
// If piece is in its place check if we won the game
+ bool won = false;
if(currentPlace() == correctPlace()) {
- GameView::instance()->areAllPiecesOk();
+ won = GameView::instance()->areAllPiecesOk();
+ }
+
+ // if we didn't win set pieces that can be moved
+ if(!won) {
+ GameView::instance()->setMovingPieces();
}
}
else {
{
event->ignore();
}
+
+int PuzzleItem::moveCount()
+{
+ return moveCount_;
+}
+
+void PuzzleItem::resetMoveCount()
+{
+ moveCount_ = 0;
+}
+
+void PuzzleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+ QGraphicsPixmapItem::paint(painter, option, widget);
+
+ if(drawNumber_) {
+ painter->save();
+
+ QFont font = painter->font();
+ QFontMetrics metrics(font);
+ QRect numberRect(0, 0, metrics.height(), metrics.height());
+
+ painter->setPen(Qt::NoPen);
+
+ painter->setBrush(QColor(255, 255, 255, 192));
+ painter->drawRect(numberRect);
+
+ painter->setPen(Qt::black);
+
+ QTextOption textOption;
+ textOption.setAlignment(Qt::AlignCenter);
+
+ painter->drawText(numberRect, QString::number(pieceNumber_), textOption);
+
+ painter->restore();
+ }
+}
+
+int PuzzleItem::pieceNumber() const
+{
+ return pieceNumber_;
+}
+
+void PuzzleItem::setPieceNumber(const int pieceNumber)
+{
+ pieceNumber_ = pieceNumber;
+}
+
+void PuzzleItem::setDrawNumber(bool value)
+{
+ if(value != drawNumber_) {
+ drawNumber_ = value;
+ update();
+ }
+}
+
+bool PuzzleItem::drawNumber() const
+{
+ return drawNumber_;
+}