if (state->layout->mines[y*w+x]) {
/*
- * The player has landed on a mine. Bad luck. Expose all
- * the mines.
+ * The player has landed on a mine. Bad luck. Expose the
+ * mine that killed them, but not the rest (in case they
+ * want to Undo and carry on playing).
*/
state->dead = TRUE;
- for (yy = 0; yy < h; yy++)
- for (xx = 0; xx < w; xx++) {
- if (state->layout->mines[yy*w+xx] &&
- (state->grid[yy*w+xx] == -2 ||
- state->grid[yy*w+xx] == -3)) {
- state->grid[yy*w+xx] = 64;
- }
- if (!state->layout->mines[yy*w+xx] &&
- state->grid[yy*w+xx] == -1) {
- state->grid[yy*w+xx] = 66;
- }
- }
state->grid[y*w+x] = 65;
return -1;
}
struct game_ui {
int hx, hy, hradius; /* for mouse-down highlights */
int flash_is_death;
+ int deaths;
};
static game_ui *new_ui(game_state *state)
game_ui *ui = snew(game_ui);
ui->hx = ui->hy = -1;
ui->hradius = 0;
+ ui->deaths = 0;
ui->flash_is_death = FALSE; /* *shrug* */
return ui;
}
ret = dup_game(from);
ret->just_used_solve = FALSE;
open_square(ret, cx, cy);
+ if (ret->dead)
+ ui->deaths++;
return ret;
}
(ret->grid[(cy+dy)*ret->w+(cx+dx)] == -2 ||
ret->grid[(cy+dy)*ret->w+(cx+dx)] == -3))
open_square(ret, cx+dx, cy+dy);
+ if (ret->dead)
+ ui->deaths++;
return ret;
}
}
{
char statusbar[512];
if (state->dead) {
- sprintf(statusbar, "GAME OVER!");
+ sprintf(statusbar, "DEAD!");
} else if (state->won) {
if (state->used_solve)
sprintf(statusbar, "Auto-solved.");
else
sprintf(statusbar, "COMPLETED!");
} else {
- sprintf(statusbar, "Mines marked: %d / %d", markers, mines);
+ sprintf(statusbar, "Marked: %d / %d", markers, mines);
}
+ if (ui->deaths)
+ sprintf(statusbar + strlen(statusbar),
+ " Deaths: %d", ui->deaths);
status_bar(fe, statusbar);
}
}
will be done for you automatically; so sometimes when you uncover a
square, a whole new area will open up to be explored.
-(All the actions described in \k{common-actions} are also available.
+All the actions described in \k{common-actions} are also available.
+
Even Undo is available, although you might consider it cheating to
-use it!)
+use it. If you step on a mine, the program will only reveal the mine
+in question (unlike most other implementations, which reveal all of
+them). You can then Undo your fatal move and continue playing if you
+like. The program will track the number of times you died (and Undo
+will not reduce that counter), so when you get to the end of the
+game you know whether or not you did it without making any errors.
+
+(If you really want to know the full layout of the grid, which other
+implementations will show you after you die, you can always use the
+Solve menu option.)
\H{mines-parameters} \I{parameters, for Mines}Mines parameters