From 6aa6af4c00e72c789d76949d735ccb07da5e47a1 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 30 May 2005 18:41:40 +0000 Subject: [PATCH] Added an `interactive' flag to new_game_desc(), which toggles Mines between on the one hand generating indeterminate game descriptions awaiting the initial click, and on the other hand generating concrete ones which have had their initial click. This makes `mines --generate' do something useful. git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5869 cda61777-01e9-0310-a592-d414129be87e --- cube.c | 2 +- fifteen.c | 2 +- gtk.c | 2 +- midend.c | 6 ++++-- mines.c | 37 +++++++++++++++++++++---------------- net.c | 2 +- netslide.c | 2 +- nullgame.c | 2 +- pattern.c | 2 +- puzzles.h | 2 +- rect.c | 2 +- sixteen.c | 2 +- solo.c | 2 +- twiddle.c | 2 +- 14 files changed, 37 insertions(+), 30 deletions(-) diff --git a/cube.c b/cube.c index a65b918..2bce1bd 100644 --- a/cube.c +++ b/cube.c @@ -586,7 +586,7 @@ static void classify_grid_square_callback(void *ctx, struct grid_square *sq) } static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux) + game_aux_info **aux, int interactive) { struct grid_data data; int i, j, k, m, area, facesperclass; diff --git a/fifteen.c b/fifteen.c index bbdb939..e7a41ef 100644 --- a/fifteen.c +++ b/fifteen.c @@ -151,7 +151,7 @@ static int perm_parity(int *perm, int n) } static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux) + game_aux_info **aux, int interactive) { int gap, n, i, x; int x1, x2, p1, p2, parity; diff --git a/gtk.c b/gtk.c index 84e5e72..645b250 100644 --- a/gtk.c +++ b/gtk.c @@ -1307,7 +1307,7 @@ int main(int argc, char **argv) while (n-- > 0) { game_aux_info *aux = NULL; - char *desc = thegame.new_desc(par, rs, &aux); + char *desc = thegame.new_desc(par, rs, &aux, FALSE); printf("%s:%s\n", parstr, desc); sfree(desc); if (aux) diff --git a/midend.c b/midend.c index 8adc1c3..e8bcd20 100644 --- a/midend.c +++ b/midend.c @@ -178,7 +178,8 @@ void midend_new_game(midend_data *me) me->aux_info = NULL; rs = random_init(me->seedstr, strlen(me->seedstr)); - me->desc = me->ourgame->new_desc(me->curparams, rs, &me->aux_info); + me->desc = me->ourgame->new_desc(me->curparams, rs, + &me->aux_info, TRUE); random_free(rs); } @@ -521,7 +522,8 @@ float *midend_colours(midend_data *me, int *ncolours) if (me->nstates == 0) { game_aux_info *aux = NULL; - char *desc = me->ourgame->new_desc(me->params, me->random, &aux); + char *desc = me->ourgame->new_desc(me->params, me->random, + &aux, TRUE); state = me->ourgame->new_game(me, me->params, desc); sfree(desc); if (aux) diff --git a/mines.c b/mines.c index 7f7d316..38d31f9 100644 --- a/mines.c +++ b/mines.c @@ -1847,24 +1847,29 @@ static char *new_mine_layout(int w, int h, int n, int x, int y, int unique, } static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux) + game_aux_info **aux, int interactive) { -#ifdef PREOPENED - int x = random_upto(rs, params->w); - int y = random_upto(rs, params->h); - char *grid, *desc; - - grid = new_mine_layout(params->w, params->h, params->n, - x, y, params->unique, rs); -#else - char *rsdesc, *desc; + if (!interactive) { + /* + * For batch-generated grids, pre-open one square. + */ + int x = random_upto(rs, params->w); + int y = random_upto(rs, params->h); + char *grid, *desc; + + grid = new_mine_layout(params->w, params->h, params->n, + x, y, params->unique, rs, &desc); + sfree(grid); + return desc; + } else { + char *rsdesc, *desc; - rsdesc = random_state_encode(rs); - desc = snewn(strlen(rsdesc) + 100, char); - sprintf(desc, "r%d,%c,%s", params->n, params->unique ? 'u' : 'a', rsdesc); - sfree(rsdesc); - return desc; -#endif + rsdesc = random_state_encode(rs); + desc = snewn(strlen(rsdesc) + 100, char); + sprintf(desc, "r%d,%c,%s", params->n, params->unique ? 'u' : 'a', rsdesc); + sfree(rsdesc); + return desc; + } } static void game_free_aux_info(game_aux_info *aux) diff --git a/net.c b/net.c index fa4c979..a2204c0 100644 --- a/net.c +++ b/net.c @@ -1146,7 +1146,7 @@ static void perturb(int w, int h, unsigned char *tiles, int wrapping, } static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux) + game_aux_info **aux, int interactive) { tree234 *possibilities, *barriertree; int w, h, x, y, cx, cy, nbarriers; diff --git a/netslide.c b/netslide.c index bf5fc75..324946e 100644 --- a/netslide.c +++ b/netslide.c @@ -334,7 +334,7 @@ static char *validate_params(game_params *params) */ static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux) + game_aux_info **aux, int interactive) { tree234 *possibilities, *barriertree; int w, h, x, y, cx, cy, nbarriers; diff --git a/nullgame.c b/nullgame.c index abb6cc5..3ec6b75 100644 --- a/nullgame.c +++ b/nullgame.c @@ -84,7 +84,7 @@ static char *validate_params(game_params *params) } static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux) + game_aux_info **aux, int interactive) { return dupstr("FIXME"); } diff --git a/pattern.c b/pattern.c index c5fd9dc..419e4aa 100644 --- a/pattern.c +++ b/pattern.c @@ -475,7 +475,7 @@ struct game_aux_info { }; static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux) + game_aux_info **aux, int interactive) { unsigned char *grid; int i, j, max, rowlen, *rowdata; diff --git a/puzzles.h b/puzzles.h index f3db36f..4ee718e 100644 --- a/puzzles.h +++ b/puzzles.h @@ -214,7 +214,7 @@ struct game { game_params *(*custom_params)(config_item *cfg); char *(*validate_params)(game_params *params); char *(*new_desc)(game_params *params, random_state *rs, - game_aux_info **aux); + game_aux_info **aux, int interactive); void (*free_aux_info)(game_aux_info *aux); char *(*validate_desc)(game_params *params, char *desc); game_state *(*new_game)(midend_data *me, game_params *params, char *desc); diff --git a/rect.c b/rect.c index 0ea0b8c..c1eaa2c 100644 --- a/rect.c +++ b/rect.c @@ -1054,7 +1054,7 @@ struct game_aux_info { }; static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux) + game_aux_info **aux, int interactive) { int *grid, *numbers = NULL; struct rectlist *list; diff --git a/sixteen.c b/sixteen.c index 1871e5f..fe3e8d1 100644 --- a/sixteen.c +++ b/sixteen.c @@ -194,7 +194,7 @@ static int perm_parity(int *perm, int n) } static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux) + game_aux_info **aux, int interactive) { int stop, n, i, x; int x1, x2, p1, p2; diff --git a/solo.c b/solo.c index addae60..168551c 100644 --- a/solo.c +++ b/solo.c @@ -1397,7 +1397,7 @@ struct game_aux_info { }; static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux) + game_aux_info **aux, int interactive) { int c = params->c, r = params->r, cr = c*r; int area = cr*cr; diff --git a/twiddle.c b/twiddle.c index 2523920..f6c8f4d 100644 --- a/twiddle.c +++ b/twiddle.c @@ -308,7 +308,7 @@ static int grid_complete(int *grid, int wh, int orientable) } static char *new_game_desc(game_params *params, random_state *rs, - game_aux_info **aux) + game_aux_info **aux, int interactive) { int *grid; int w = params->w, h = params->h, n = params->n, wh = w*h; -- 2.11.0