diff options
| author | Simon Tatham <anakin@pobox.com> | 2015-05-09 15:35:10 +0100 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2015-05-09 15:38:48 +0100 |
| commit | 52a0f3c32af1861ceda910722549115f8a2b1cae (patch) | |
| tree | 86c30fee9bc3d41e2c6cb15b88549fce07544d2b | |
| parent | 7f64f4a50e46304b7bad011a1251e146ab63ca15 (diff) | |
| download | puzzles-52a0f3c32af1861ceda910722549115f8a2b1cae.zip puzzles-52a0f3c32af1861ceda910722549115f8a2b1cae.tar.gz puzzles-52a0f3c32af1861ceda910722549115f8a2b1cae.tar.bz2 puzzles-52a0f3c32af1861ceda910722549115f8a2b1cae.tar.xz | |
Special-case right-dragging of a numbered cell off the grid.
Chris Boyle reports that if you right-drag a numbered cell off the
grid, _all_ numbered cells (except the immutable initial clues) get
reset to blank, because this is treated as an attempt to erase a whole
chain of linked cells (of the form a,a+1,...,a_k) and the cells with
definite numbers are all treated as 'chain 0'.
In that situation, I now substitute the same behaviour you'd get by
left-dragging the numbered cell off the board, i.e. erase _just_ that
cell and not the whole of the rest of the puzzle.
(The previous unintended behaviour was a UI action you surely never
want - and Chris also reports that due to the Android front end's way
of representing right-drags, it's especially easy to hit by mistake.)
| -rw-r--r-- | signpost.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -1578,6 +1578,8 @@ static game_state *execute_move(const game_state *state, const char *move) si = sy*w+sx; ei = ey*w+ex; makelink(ret, si, ei); } else if (sscanf(move, "%c%d,%d", &c, &sx, &sy) == 3) { + int sset; + if (c != 'C' && c != 'X') return NULL; if (!INGRID(state, sx, sy)) return NULL; si = sy*w+sx; @@ -1586,11 +1588,12 @@ static game_state *execute_move(const game_state *state, const char *move) ret = dup_game(state); - if (c == 'C') { + sset = state->nums[si] / (state->n+1); + if (c == 'C' || (c == 'X' && sset == 0)) { /* Unlink the single cell we dragged from the board. */ unlink_cell(ret, si); } else { - int i, set, sset = state->nums[si] / (state->n+1); + int i, set; for (i = 0; i < state->n; i++) { /* Unlink all cells in the same set as the one we dragged * from the board. */ |