mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
Mines: Don't check if the player has won if they've already lost
It can't happen in normal play, but if a save file had a "C" (clear around) move that set off a mine, Mines could end up hitting an assertion failure, "ncovered >= nmines". This was because it would check if the player had won by counting covered squares and mines, and of course an uncovered mine is no longer a covered square but is still a mine. Since winning after you're dead isn't possible (at least in Mines), we now skip the check entirely if the player has already died. This save file demonstrates the problem: SAVEFILE:41:Simon Tatham's Portable Puzzle Collection GAME :5:Mines PARAMS :1:7 CPARAMS :1:7 DESC :22:r31,u,0000C000d0000020 NSTATES :1:2 STATEPOS:1:1 MOVE :4:C6,2
This commit is contained in:
2
mines.c
2
mines.c
@ -2146,6 +2146,8 @@ static int open_square(game_state *state, int x, int y)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the player has already lost, don't let them win as well. */
|
||||||
|
if (state->dead) return 0;
|
||||||
/*
|
/*
|
||||||
* Finally, scan the grid and see if exactly as many squares
|
* Finally, scan the grid and see if exactly as many squares
|
||||||
* are still covered as there are mines. If so, set the `won'
|
* are still covered as there are mines. If so, set the `won'
|
||||||
|
Reference in New Issue
Block a user