X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/51990f54372f9c63cef56dbe14a61f3b00a6760c..826e0298fa89ec38199e45ff9202314882dcab23:/signpost.c diff --git a/signpost.c b/signpost.c index 05d4eaf..a9c38f5 100644 --- a/signpost.c +++ b/signpost.c @@ -423,6 +423,8 @@ static char *validate_params(game_params *params, int full) { if (params->w < 2 || params->h < 2) return "Width and height must both be at least two"; + if (params->w == 2 && params->h == 2) /* leads to generation hang */ + return "Width and height cannot both be two"; return NULL; } @@ -511,7 +513,7 @@ static void unpick_desc(game_params *params, char *desc, } c = *desc; - if (isdigit(c)) { + if (isdigit((unsigned char)c)) { num = (num*10) + (int)(c-'0'); if (num > state->n) { msg = "Number too large"; @@ -750,6 +752,7 @@ static int new_game_strip(game_state *state, random_state *rs) copy->flags[j] |= FLAG_IMMUTABLE; state->flags[j] |= FLAG_IMMUTABLE; debug_state("Copy of state: ", copy); + strip_nums(copy); if (solve_state(copy) > 0) goto solved; assert(check_nums(state, copy, 1)); } @@ -2119,6 +2122,11 @@ static float game_flash_length(game_state *oldstate, game_state *newstate, return 0.0F; } +static int game_is_solved(game_state *state) +{ + return state->completed; +} + static int game_timing_state(game_state *state, game_ui *ui) { return TRUE; @@ -2200,10 +2208,11 @@ const struct game thegame = { game_redraw, game_anim_length, game_flash_length, + game_is_solved, TRUE, FALSE, game_print_size, game_print, FALSE, /* wants_statusbar */ FALSE, game_timing_state, - REQUIRE_RBUTTON | REQUIRE_NUMPAD, /* flags */ + REQUIRE_RBUTTON, /* flags */ }; #ifdef STANDALONE_SOLVER