remembering whether the player had ever used the hint or solve
functions, even if they then pressed undo (and even if they saved and
restored).
As far as Solve+Undo is concerned, this just brings Range into line
with common practice in the rest of my puzzles. On the other hand,
Range is the first time there's been a 'hint' function to consider in
this question, so here's a policy decision: the victory flash is not a
congratulation for a puzzle solved unaided, it's a confirmation that
you really have reached a correct solution and haven't made any
mistakes. So the only reason to omit the victory flash is if you've
used the Solve operation to go straight to a guaranteed-correct
solution _in a single move_; if you're using the hint button, there's
still scope for you to make mistakes in all your non-hint moves, so
the victory flash is still a useful indicator that you didn't.
git-svn-id: svn://svn.tartarus.org/sgt/puzzles@9306
cda61777-01e9-0310-a592-
d414129be87e
struct game_ui {
puzzle_size r, c; /* cursor position */
unsigned int cursor_show: 1;
struct game_ui {
puzzle_size r, c; /* cursor position */
unsigned int cursor_show: 1;
- unsigned int cheated: 1;
};
static game_ui *new_ui(game_state *state)
{
struct game_ui *ui = snew(game_ui);
ui->r = ui->c = 0;
};
static game_ui *new_ui(game_state *state)
{
struct game_ui *ui = snew(game_ui);
ui->r = ui->c = 0;
- ui->cursor_show = ui->cheated = FALSE;
+ ui->cursor_show = FALSE;
static char *encode_ui(game_ui *ui)
{
static char *encode_ui(game_ui *ui)
{
- return dupstr(ui->cheated ? "1" : "0");
}
static void decode_ui(game_ui *ui, char *encoding)
{
}
static void decode_ui(game_ui *ui, char *encoding)
{
- ui->cheated = (*encoding == '1');
}
typedef struct drawcell {
}
typedef struct drawcell {
ret = nfmtstr(40, "%c,%d,%d",
buf->colour == M_BLACK ? 'B' : 'W',
buf->square.r, buf->square.c);
ret = nfmtstr(40, "%c,%d,%d",
buf->colour == M_BLACK ? 'B' : 'W',
buf->square.r, buf->square.c);
- ui->cheated = TRUE; /* you are being naughty ;-) */
+ /* We used to set a flag here in the game_ui indicating
+ * that the player had used the hint function. I (SGT)
+ * retired it, on grounds of consistency with other games
+ * (most of these games will still flash to indicate
+ * completion if you solved and undid it, so why not if
+ * you got a hint?) and because the flash is as much about
+ * checking you got it all right than about congratulating
+ * you on a job well done. */
}
sfree(buf);
return ret;
}
sfree(buf);
return ret;
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
static void game_changed_state(game_ui *ui, game_state *oldstate,
game_state *newstate)
{
- if (newstate->has_cheated) ui->cheated = TRUE;
}
static float game_anim_length(game_state *oldstate, game_state *newstate,
}
static float game_anim_length(game_state *oldstate, game_state *newstate,
static float game_flash_length(game_state *from, game_state *to,
int dir, game_ui *ui)
{
static float game_flash_length(game_state *from, game_state *to,
int dir, game_ui *ui)
{
- if (!from->was_solved && to->was_solved && !ui->cheated)
+ if (!from->was_solved && to->was_solved && !to->has_cheated)
return FLASH_TIME;
return 0.0F;
}
return FLASH_TIME;
return 0.0F;
}