chiark / gitweb /
changelog: document last change
[sgt-puzzles.git] / towers.c
index b5092f013ce403a0a97655f391fe98983e1d3769..656b8ad338532be40e82a919812a9bd719ee7ee0 100644 (file)
--- a/towers.c
+++ b/towers.c
@@ -388,12 +388,12 @@ static int solver_easy(struct latin_solver *solver, void *vctx)
            return ret;
 
 #ifdef STANDALONE_SOLVER
-           if (solver_show_working)
-               sprintf(prefix, "%*slower bounds for clue %s %d:\n",
-                       solver_recurse_depth*4, "",
-                       cluepos[c/w], c%w+1);
-           else
-               prefix[0] = '\0';              /* placate optimiser */
+       if (solver_show_working)
+           sprintf(prefix, "%*slower bounds for clue %s %d:\n",
+                   solver_recurse_depth*4, "",
+                   cluepos[c/w], c%w+1);
+       else
+           prefix[0] = '\0';          /* placate optimiser */
 #endif
 
        i = 0;
@@ -1248,7 +1248,8 @@ static int check_errors(const game_state *state, int *errors)
            }
        }
 
-       if (n > clues[i] || (j == w && n < clues[i])) {
+       if (n > clues[i] || (best == w && n < clues[i]) ||
+           (best < w && n == clues[i])) {
            if (errors) {
                int x, y;
                CLUEPOS(x, y, i, w);
@@ -1292,6 +1293,7 @@ static char *interpret_move(const game_state *state, game_ui *ui,
                             int x, int y, int button)
 {
     int w = state->par.w;
+    int shift_or_control = button & (MOD_SHFT | MOD_CTRL);
     int tx, ty;
     char buf[80];
 
@@ -1376,6 +1378,20 @@ static char *interpret_move(const game_state *state, game_ui *ui,
         }
     }
     if (IS_CURSOR_MOVE(button)) {
+        if (shift_or_control) {
+            int x = ui->hx, y = ui->hy;
+            switch (button) {
+            case CURSOR_LEFT:   x = -1; break;
+            case CURSOR_RIGHT:  x =  w; break;
+            case CURSOR_UP:     y = -1; break;
+            case CURSOR_DOWN:   y =  w; break;
+            }
+            if (is_clue(state, x, y)) {
+                sprintf(buf, "%c%d,%d", 'D', x, y);
+                return dupstr(buf);
+            }
+            return NULL;
+        }
         move_cursor(button, &ui->hx, &ui->hy, w, w, 0);
         ui->hshow = ui->hcursor = 1;
         return "";
@@ -1962,7 +1978,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize)
 const struct game thegame = {
     "Towers", "games.towers", "towers",
     default_params,
-    game_fetch_preset,
+    game_fetch_preset, NULL,
     decode_params,
     encode_params,
     free_params,