solve_game() is passed the _initial_ game state, not the most recent
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 7 May 2005 16:07:26 +0000 (16:07 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 7 May 2005 16:07:26 +0000 (16:07 +0000)
one; so we can't just set `ret->completed = ret->movecount' and hope
it's been set to something other than zero. Instead, we set both
move counts to 1, which is entirely arbitrary but works.

This fixes a subtle bug with the Solve feature: if you pressed
Solve, then disturbed the grid, then brought it back to the solved
state by making more forward moves (rather than using Undo), then
the first time you did this the `Moves since auto-solve' status line
would reset to zero.

git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5759 cda61777-01e9-0310-a592-d414129be87e

fifteen.c
netslide.c
sixteen.c
twiddle.c

index 0ed5067..3aba7fa 100644 (file)
--- a/fifteen.c
+++ b/fifteen.c
@@ -398,7 +398,7 @@ static game_state *solve_game(game_state *state, game_aux_info *aux,
        ret->tiles[i] = (i+1) % ret->n;
     ret->gap_pos = ret->n-1;
     ret->used_solve = ret->just_used_solve = TRUE;
-    ret->completed = ret->movecount;
+    ret->completed = ret->movecount = 1;
 
     return ret;
 }
index f367621..02fa438 100644 (file)
@@ -805,7 +805,7 @@ static game_state *solve_game(game_state *state, game_aux_info *aux,
     ret = dup_game(state);
     memcpy(ret->tiles, state->solution->tiles, ret->width * ret->height);
     ret->used_solve = ret->just_used_solve = TRUE;
-    ret->completed = ret->move_count;
+    ret->completed = ret->move_count = 1;
 
     return ret;
 }
index 950f724..3a5ce8a 100644 (file)
--- a/sixteen.c
+++ b/sixteen.c
@@ -406,7 +406,7 @@ static game_state *solve_game(game_state *state, game_aux_info *aux,
     for (i = 0; i < ret->n; i++)
        ret->tiles[i] = i+1;
     ret->used_solve = ret->just_used_solve = TRUE;
-    ret->completed = ret->movecount;
+    ret->completed = ret->movecount = 1;
 
     return ret;
 }
index 8fd0b21..6c51cb7 100644 (file)
--- a/twiddle.c
+++ b/twiddle.c
@@ -492,7 +492,7 @@ static game_state *solve_game(game_state *state, game_aux_info *aux,
     for (i = 0; i < ret->w*ret->h; i++)
        ret->grid[i] &= ~3;
     ret->used_solve = ret->just_used_solve = TRUE;
-    ret->completed = ret->movecount;
+    ret->completed = ret->movecount = 1;
 
     return ret;
 }