[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