X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/72c158219fd9dbf19a01f2bf62303627a5e414e4..c0f63b88e536d161a4508c918f805fbc497b75c9:/guess.c diff --git a/guess.c b/guess.c index 8cab1a4..a9fc134 100644 --- a/guess.c +++ b/guess.c @@ -43,7 +43,7 @@ struct game_state { pegrow solution; int next_go; /* from 0 to nguesses-1; if next_go == nguesses then they've lost. */ - int solved; + int solved; /* +1 = win, -1 = lose, 0 = still playing */ }; static game_params *default_params(void) @@ -790,7 +790,7 @@ static game_state *execute_move(game_state *from, char *move) if (!strcmp(move, "S")) { ret = dup_game(from); - ret->solved = 1; + ret->solved = -1; return ret; } else if (move[0] == 'G') { p = move+1; @@ -817,11 +817,11 @@ static game_state *execute_move(game_state *from, char *move) nc_place = mark_pegs(ret->guesses[from->next_go], ret->solution, ret->params.ncolours); if (nc_place == ret->solution->npegs) { - ret->solved = 1; /* win! */ + ret->solved = +1; /* win! */ } else { ret->next_go = from->next_go + 1; if (ret->next_go >= ret->params.nguesses) - ret->solved = 1; /* 'lose' so we show the pegs. */ + ret->solved = -1; /* lose, meaning we show the pegs. */ } return ret; @@ -1273,7 +1273,7 @@ static void game_redraw(drawing *dr, game_drawstate *ds, game_state *oldstate, currmove_redraw(dr, ds, state->next_go, COL_HOLD); /* draw the solution (or the big rectangle) */ - if ((state->solved != ds->solved) || !ds->started) { + if ((!state->solved ^ !ds->solved) || !ds->started) { draw_rect(dr, SOLN_OX, SOLN_OY, SOLN_W, SOLN_H, state->solved ? COL_BACKGROUND : COL_EMPTY); draw_update(dr, SOLN_OX, SOLN_OY, SOLN_W, SOLN_H); @@ -1313,14 +1313,13 @@ static float game_flash_length(game_state *oldstate, game_state *newstate, return 0.0F; } -static int game_is_solved(game_state *state) +static int game_status(game_state *state) { /* - * We return true whenever the solution has been revealed, even - * (on spoiler grounds) if it wasn't guessed correctly. - * - * However, in that situation, 'solved' is still true, so we don't - * have to make any effort to arrange this. + * We return nonzero whenever the solution has been revealed, even + * (on spoiler grounds) if it wasn't guessed correctly. The + * correct return value from this function is already in + * state->solved. */ return state->solved; } @@ -1373,7 +1372,7 @@ const struct game thegame = { game_redraw, game_anim_length, game_flash_length, - game_is_solved, + game_status, FALSE, FALSE, game_print_size, game_print, FALSE, /* wants_statusbar */ FALSE, game_timing_state,