mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
I've proved that a grid dimension of 2 is capable of irretrievably
hanging the grid generator and that there's no way to fix it. Therefore, lower limit of 3 squares in each direction, which will upset envelope-pushers everywhere but doesn't destroy any actually interesting puzzles. [originally from svn r5895]
This commit is contained in:
22
mines.c
22
mines.c
@ -237,12 +237,22 @@ static game_params *custom_params(config_item *cfg)
|
|||||||
|
|
||||||
static char *validate_params(game_params *params)
|
static char *validate_params(game_params *params)
|
||||||
{
|
{
|
||||||
if (params->w <= 0 && params->h <= 0)
|
/*
|
||||||
return "Width and height must both be greater than zero";
|
* Lower limit on grid size: each dimension must be at least 3.
|
||||||
if (params->w <= 0)
|
* 1 is theoretically workable if rather boring, but 2 is a
|
||||||
return "Width must be greater than zero";
|
* real problem: there is often _no_ way to generate a uniquely
|
||||||
if (params->h <= 0)
|
* solvable 2xn Mines grid. You either run into two mines
|
||||||
return "Height must be greater than zero";
|
* blocking the way and no idea what's behind them, or one mine
|
||||||
|
* and no way to know which of the two rows it's in. If the
|
||||||
|
* mine count is even you can create a soluble grid by packing
|
||||||
|
* all the mines at one end (so what when you hit a two-mine
|
||||||
|
* wall there are only as many covered squares left as there
|
||||||
|
* are mines); but if it's odd, you are doomed, because you
|
||||||
|
* _have_ to have a gap somewhere which you can't determine the
|
||||||
|
* position of.
|
||||||
|
*/
|
||||||
|
if (params->w <= 2 || params->h <= 2)
|
||||||
|
return "Width and height must both be greater than two";
|
||||||
if (params->n > params->w * params->h - 9)
|
if (params->n > params->w * params->h - 9)
|
||||||
return "Too many mines for grid size";
|
return "Too many mines for grid size";
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user