aboutsummaryrefslogtreecommitdiff
path: root/guess.c
diff options
context:
space:
mode:
Diffstat (limited to 'guess.c')
-rw-r--r--guess.c23
1 files changed, 11 insertions, 12 deletions
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,