mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-20 23:51:29 -07:00
Tents: mark squares as non-tents with {Shift,Control}-cursor keys.
This commit is contained in:

committed by
Simon Tatham

parent
67178751e9
commit
3234912f92
@ -2110,7 +2110,9 @@ remainder of a row once you have placed all its tents.)
|
|||||||
You can also use the cursor keys to move around the grid. Pressing the
|
You can also use the cursor keys to move around the grid. Pressing the
|
||||||
return key over an empty square will place a tent, and pressing the
|
return key over an empty square will place a tent, and pressing the
|
||||||
space bar over an empty square will colour it green; either key will
|
space bar over an empty square will colour it green; either key will
|
||||||
clear an occupied square.
|
clear an occupied square. Holding Shift and pressing the cursor keys
|
||||||
|
will colour empty squares green. Holding Control and pressing the
|
||||||
|
cursor keys will colour green both empty squares and squares with tents.
|
||||||
|
|
||||||
(All the actions described in \k{common-actions} are also available.)
|
(All the actions described in \k{common-actions} are also available.)
|
||||||
|
|
||||||
|
23
tents.c
23
tents.c
@ -1544,6 +1544,9 @@ static char *interpret_move(const game_state *state, game_ui *ui,
|
|||||||
{
|
{
|
||||||
int w = state->p.w, h = state->p.h;
|
int w = state->p.w, h = state->p.h;
|
||||||
char tmpbuf[80];
|
char tmpbuf[80];
|
||||||
|
int shift = button & MOD_SHFT, control = button & MOD_CTRL;
|
||||||
|
|
||||||
|
button &= ~MOD_MASK;
|
||||||
|
|
||||||
if (button == LEFT_BUTTON || button == RIGHT_BUTTON) {
|
if (button == LEFT_BUTTON || button == RIGHT_BUTTON) {
|
||||||
x = FROMCOORD(x);
|
x = FROMCOORD(x);
|
||||||
@ -1640,8 +1643,26 @@ static char *interpret_move(const game_state *state, game_ui *ui,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (IS_CURSOR_MOVE(button)) {
|
if (IS_CURSOR_MOVE(button)) {
|
||||||
move_cursor(button, &ui->cx, &ui->cy, w, h, 0);
|
|
||||||
ui->cdisp = 1;
|
ui->cdisp = 1;
|
||||||
|
if (shift || control) {
|
||||||
|
int len = 0, i, indices[2];
|
||||||
|
indices[0] = ui->cx + w * ui->cy;
|
||||||
|
move_cursor(button, &ui->cx, &ui->cy, w, h, 0);
|
||||||
|
indices[1] = ui->cx + w * ui->cy;
|
||||||
|
|
||||||
|
/* NONTENTify all unique traversed eligible squares */
|
||||||
|
for (i = 0; i <= (indices[0] != indices[1]); ++i)
|
||||||
|
if (state->grid[indices[i]] == BLANK ||
|
||||||
|
(control && state->grid[indices[i]] == TENT)) {
|
||||||
|
len += sprintf(tmpbuf + len, "%sN%d,%d", len ? ";" : "",
|
||||||
|
indices[i] % w, indices[i] / w);
|
||||||
|
assert(len < lenof(tmpbuf));
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpbuf[len] = '\0';
|
||||||
|
if (len) return dupstr(tmpbuf);
|
||||||
|
} else
|
||||||
|
move_cursor(button, &ui->cx, &ui->cy, w, h, 0);
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
if (ui->cdisp) {
|
if (ui->cdisp) {
|
||||||
|
Reference in New Issue
Block a user