Changing default piece counts
[impuzzle] / src / puzzleitem.cpp
index 1be8e9e..de9d3dc 100644 (file)
 
 #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
@@ -75,9 +82,17 @@ void PuzzleItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
         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 {
@@ -89,3 +104,63 @@ void PuzzleItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
 {
     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_;
+}