From e4b6a85b3c76d4002feff93c0dc268366192f906 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 17 Oct 2005 18:41:05 +0000 Subject: [PATCH] Miscellaneous fixes. Correct a comparison of y with w causing assertion failures in portrait-type grids; retire an unused array in the game generation function (my original generation strategy needed it, but the final one didn't); correct a typo; further restrict the generable sizes of game and include a special case for 4x4dt to prevent a tight loop. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@6405 cda61777-01e9-0310-a592-d414129be87e --- tents.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/tents.c b/tents.c index 7552b6b..8a555b4 100644 --- a/tents.c +++ b/tents.c @@ -415,8 +415,12 @@ static game_params *custom_params(config_item *cfg) static char *validate_params(game_params *params, int full) { - if (params->w < 2 || params->h < 2) - return "Width and height must both be at least two"; + /* + * Generating anything under 4x4 runs into trouble of one kind + * or another. + */ + if (params->w < 4 || params->h < 4) + return "Width and height must both be at least four"; return NULL; } @@ -916,7 +920,7 @@ static char *new_game_desc(game_params *params, random_state *rs, char *puzzle = snewn(w*h, char); int *numbers = snewn(w+h, int); char *soln = snewn(w*h, char); - int *temp = snewn(2*w*h, int), *itemp = temp + w*h; + int *temp = snewn(2*w*h, int); int maxedges = ntrees*4 + w*h; int *edges = snewn(2*maxedges, int); int *capacity = snewn(maxedges, int); @@ -962,9 +966,9 @@ static char *new_game_desc(game_params *params, random_state *rs, * The maxflow algorithm is not randomised, so employed naively * it would give rise to grids with clear structure and * directional bias. Hence, I assign the network nodes as seen - * by maxflow to be a _random_ permutation the squares of the - * grid, so that any bias shown by maxflow towards low-numbered - * nodes is turned into a random bias. + * by maxflow to be a _random_ permutation of the squares of + * the grid, so that any bias shown by maxflow towards + * low-numbered nodes is turned into a random bias. * * This generation strategy can fail at many points, including * as early as tent placement (if you get a bad random order in @@ -979,16 +983,16 @@ static char *new_game_desc(game_params *params, random_state *rs, * trouble. */ + if (params->diff > DIFF_EASY && params->w <= 4 && params->h <= 4) + params->diff = DIFF_EASY; /* downgrade to prevent tight loop */ + while (1) { /* - * Arrange the grid squares into a random order, and invert - * that order so we can find a square's index as well. + * Arrange the grid squares into a random order. */ for (i = 0; i < w*h; i++) temp[i] = i; shuffle(temp, w*h, sizeof(*temp), rs); - for (i = 0; i < w*h; i++) - itemp[temp[i]] = i; /* * The first `ntrees' entries in temp which we can get @@ -1562,7 +1566,7 @@ static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds, ymin = min(ui->dsy, ui->dey); ymax = max(ui->dsy, ui->dey); assert(0 <= xmin && xmin <= xmax && xmax < w); - assert(0 <= ymin && ymin <= ymax && ymax < w); + assert(0 <= ymin && ymin <= ymax && ymax < h); buflen = 0; bufsize = 256; -- 2.11.0