mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
Format Palisade solve-type moves in sensible ASCII.
The solve move stored in 'aux' by new_game_desc consists of printable characters in the range '@' to 'O', each representing a 4-bit bitmap of edges around a cell. But the one generated on the fly by solve_game() was missing out the 0x40 bit and just returning characters in the range ^@ to ^O - which would not only have been horrible if you found such a string in a save file, but also meant that a game with any completely borderless square would have a solution move string terminating early due to the ^@, causing execute_move() to reject it. Example: ./palisade --test-solve --generate 1 5x5n5#12345-37 now succeeds, where previously it failed an assertion.
This commit is contained in:
@ -755,8 +755,12 @@ static char *solve_game(const game_state *state, const game_state *currstate,
|
|||||||
init_borders(w, h, move + 1);
|
init_borders(w, h, move + 1);
|
||||||
move[wh + 1] = '\0';
|
move[wh + 1] = '\0';
|
||||||
|
|
||||||
if (solver(&state->shared->params, state->shared->clues, move + 1))
|
if (solver(&state->shared->params, state->shared->clues, move + 1)) {
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < wh; i++)
|
||||||
|
move[i+1] |= '@'; /* turn into sensible ASCII */
|
||||||
return (char *) move;
|
return (char *) move;
|
||||||
|
}
|
||||||
|
|
||||||
*error = "Sorry, I can't solve this puzzle";
|
*error = "Sorry, I can't solve this puzzle";
|
||||||
sfree(move);
|
sfree(move);
|
||||||
|
Reference in New Issue
Block a user