ref: 751d7a25244d2b62352b57e298c409a8a419bcb2
parent: 6336dbf208078af6eef51669510e885a91ca64b8
author: Simon Tatham <anakin@pobox.com>
date: Sat May 7 12:07:26 EDT 2005
solve_game() is passed the _initial_ game state, not the most recent 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. [originally from svn r5759]
--- a/fifteen.c
+++ b/fifteen.c
@@ -398,7 +398,7 @@
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;
}
--- a/netslide.c
+++ b/netslide.c
@@ -805,7 +805,7 @@
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;
}
--- a/sixteen.c
+++ b/sixteen.c
@@ -406,7 +406,7 @@
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;
}
--- a/twiddle.c
+++ b/twiddle.c
@@ -492,7 +492,7 @@
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;
}