From e4328b9081dabc78f6115fe2dd916e8e5fe8cca0 Mon Sep 17 00:00:00 2001 From: Simon Tatham Date: Mon, 30 May 2005 18:41:40 +0000 Subject: 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. [originally from svn r5869] --- mines.c | 37 +++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'mines.c') 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) -- cgit v1.1