diff options
author | Sébastien Dailly <sebastien@chimrod.com> | 2014-08-29 14:44:44 +0200 |
---|---|---|
committer | Sébastien Dailly <sebastien@chimrod.com> | 2014-08-29 14:44:44 +0200 |
commit | d48ac3970ef04a404c42f30c72cbdc327178f0dc (patch) | |
tree | 2425a3bd33d91623cf4ae95380bd875ff3bcf2a8 /qml/actions.js | |
parent | e0184289f4d95d1d41959b5e043c9584cc66cefb (diff) |
Update js code
Diffstat (limited to 'qml/actions.js')
-rw-r--r-- | qml/actions.js | 114 |
1 files changed, 0 insertions, 114 deletions
diff --git a/qml/actions.js b/qml/actions.js deleted file mode 100644 index 40b9330..0000000 --- a/qml/actions.js +++ /dev/null @@ -1,114 +0,0 @@ -.pragma library - -/** - * Check if the case on the grid belongs to the first column. - */ -function isFirstCol(index, cols) { - return index % cols == 0; -} - -/** - * Check if the case on the grid belongs to the last column. - */ -function isLastCol(index, cols) { - return index % cols == cols - 1; -} - -/** - * Check if the case on the grid belongs to the first row - */ -function isFirstRow(index, cols) { - return index < cols; -} - -/** - * Check if the case on the grid belongs to the last row. - */ -function isLastRow(index, cols, rows) { - return cols * (rows - 1) <= index; -} - -/** - * Get all the neighbors for a given position. - */ -function getNeighbors(index, cols, rows) { - - var neighbors = []; - if (!isFirstCol(index, cols)) { - neighbors.push(index - 1) - } - - if (!isLastCol(index, cols)) { - neighbors.push(index + 1) - } - - if (!isFirstRow(index, cols)) { - neighbors.push(index - cols) - } - - if (!isLastRow(index, cols, rows)) { - neighbors.push(index + cols) - } - - return neighbors; -} - -function getChainToRemove(index, datas, cols, rows, filter) { - - var piecesToCheck = []; - var piecesToRemove = []; - - /* - * filter wich keep only free places. - */ - function freePlaces(x) { - return datas.itemAt(x).getType() === ""; - } - - var piece = index; - while (piece !== undefined) { - - /* if the case has already been marked, do not check it again. - */ - if (!datas.itemAt(piece).mark) { - datas.itemAt(piece).mark = true; - piecesToRemove.push(piece); - - var neighbors = getNeighbors(piece, cols, rows); - - if (neighbors.length !== 0) { - /* - * If the place has liberty, return empty list. - */ - if (neighbors.some(freePlaces)) { - return []; - } - - /* - * Now update the check list. - */ - neighbors.filter(filter).forEach(function(x) { - piecesToCheck.push(x) - }); - - } - } else { - /* - * The piece may have been marked outside of this call. - * (We try to check chain in each direction, and return as soon as - * we find an empty place). - * If the piece is marked, but does not belongs to the piecesToRemove, - * we assume the piece is connected to a living chain, and - * subsequently this chain too. - */ - if (! piecesToRemove.some(function(x) { return x === piece})) { - return []; - } - } - - piece = piecesToCheck.pop(); - } - return piecesToRemove; - -} - |