[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kmines/viranch/qtquick] src/qml: Implement revealing all neighbours on double clicking a digit cell
From:       Viranch Mehta <viranch.mehta () gmail ! com>
Date:       2013-03-28 11:59:43
Message-ID: 20130328115943.46447A611A () git ! kde ! org
[Download RAW message or body]

Git commit 63f0af246616ce4e38e2faaefe1bb6c1c3736eeb by Viranch Mehta.
Committed on 13/08/2012 at 17:21.
Pushed by viranch into branch 'viranch/qtquick'.

Implement revealing all neighbours on double clicking a digit cell

The neighbouring cells are revealed only if there are same number
of flagged neighbours as the digit being double clicked

M  +8    -4    src/qml/CellItem.qml
M  +6    -0    src/qml/MineField.qml
M  +17   -0    src/qml/logic.js
M  +1    -0    src/qml/main.qml

http://commits.kde.org/kmines/63f0af246616ce4e38e2faaefe1bb6c1c3736eeb

diff --git a/src/qml/CellItem.qml b/src/qml/CellItem.qml
index 57635f6..33dd028 100644
--- a/src/qml/CellItem.qml
+++ b/src/qml/CellItem.qml
@@ -36,14 +36,15 @@ KgCore.CanvasItem {
     property bool error: !hasMine && flagged
 
     signal clicked
+    signal doubleClicked
 
     MouseArea {
         anchors.fill: parent
         acceptedButtons: Qt.LeftButton | Qt.RightButton
-        enabled: !revealed && border==""
+        enabled: (!revealed || digit>0) && border==""
         onPressed: {
             if (canvas.game_over) return;
-            if (mouse.button == Qt.LeftButton && cellState==0) {
+            if (mouse.button == Qt.LeftButton && !flagged && !questioned) {
                 cell.pressed = true;
             }
         }
@@ -51,8 +52,7 @@ KgCore.CanvasItem {
             if (canvas.game_over) return;
             cell.pressed = false;
             if (mouse.button == Qt.LeftButton) {
-                if (cellState>0) return;
-                revealed = true;
+                if (flagged || questioned) return;
                 cell.clicked();
             } else if (!revealed) {
                 if (flagged && !canvas.useQuestionMarks)
@@ -61,6 +61,10 @@ KgCore.CanvasItem {
                     cellState = (cellState+1)%3;
             }
         }
+        onDoubleClicked: {
+            if (digit==0 || flagged || questioned) return;
+            cell.doubleClicked();
+        }
     }
 
     KgCore.CanvasItem {
diff --git a/src/qml/MineField.qml b/src/qml/MineField.qml
index bfb52c4..74e7efe 100644
--- a/src/qml/MineField.qml
+++ b/src/qml/MineField.qml
@@ -25,6 +25,7 @@ Item {
     height: Math.min(parent.width*grid.rows/grid.columns, Math.floor(parent.height/grid.rows)*grid.rows)
 
     signal cellClicked(int index)
+    signal cellDoubleClicked(int index)
 
     property int rows
     property int columns
@@ -60,6 +61,11 @@ Item {
                     var column = index%grid.columns;
                     container.cellClicked((row-1)*container.columns + (column-1));
                 }
+                onDoubleClicked: {
+                    var row = Math.floor(index/grid.columns);
+                    var column = index%grid.columns;
+                    container.cellDoubleClicked((row-1)*container.columns + (column-1));
+                }
                 onFlaggedChanged: {
                     if (flagged) flaggedMines++;
                     else flaggedMines--;
diff --git a/src/qml/logic.js b/src/qml/logic.js
index 9dbd816..53de6d1 100644
--- a/src/qml/logic.js
+++ b/src/qml/logic.js
@@ -8,6 +8,22 @@ function reset() {
     canvas.game_over = false;
 }
 
+function revealNeighbours(index) {
+    var item = field.itemAtIndex(index);
+    var list = adjacentCells(index);
+    var flaggedNeighbours = 0;
+    for (var i=0; i<list.length; i++) {
+        if (field.itemAtIndex(list[i]).flagged) flaggedNeighbours++;
+    }
+    if (flaggedNeighbours < item.digit) return;
+
+    for (var i=0; i<list.length; i++) {
+        var cell = field.itemAtIndex(list[i]);
+        if (cell.flagged || cell.questioned) continue;
+        revealCell(list[i]);
+    }
+}
+
 function revealCell(index) {
     if (firstClick) {
         firstClick = false;
@@ -15,6 +31,7 @@ function revealCell(index) {
         canvas.firstClickDone();
     }
     var cell = field.itemAtIndex(index);
+    cell.revealed = true;
     if (cell.hasMine) {
         cell.exploded = true;
         revealAllMines();
diff --git a/src/qml/main.qml b/src/qml/main.qml
index 5fed8e3..10ef6fa 100644
--- a/src/qml/main.qml
+++ b/src/qml/main.qml
@@ -52,6 +52,7 @@ Item {
         id: field
         anchors.centerIn: parent
         onCellClicked: Logic.revealCell(index);
+        onCellDoubleClicked: Logic.revealNeighbours(index);
         onMinesChanged: canvas.minesCountChanged(flaggedMines, mines);
         onFlaggedMinesChanged: canvas.minesCountChanged(flaggedMines, mines);
         Behavior on opacity { NumberAnimation { duration: 50 } }

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic