ref: e4328b9081dabc78f6115fe2dd916e8e5fe8cca0
parent: 3c6b77c93bc508a44a5726d660bbf7161bde9945
author: Simon Tatham <anakin@pobox.com>
date: Mon May 30 14:41:40 EDT 2005
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]
--- a/cube.c
+++ b/cube.c
@@ -586,7 +586,7 @@
}
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;
--- a/fifteen.c
+++ b/fifteen.c
@@ -151,7 +151,7 @@
}
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;
--- a/gtk.c
+++ b/gtk.c
@@ -1307,7 +1307,7 @@
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)
--- a/midend.c
+++ b/midend.c
@@ -178,7 +178,8 @@
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 @@
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)
--- a/mines.c
+++ b/mines.c
@@ -1847,24 +1847,29 @@
}
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;
+ 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);
-#else
- char *rsdesc, *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)
--- a/net.c
+++ b/net.c
@@ -1146,7 +1146,7 @@
}
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;
--- a/netslide.c
+++ b/netslide.c
@@ -334,7 +334,7 @@
*/
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;
--- a/nullgame.c
+++ b/nullgame.c
@@ -84,7 +84,7 @@
}
static char *new_game_desc(game_params *params, random_state *rs,
- game_aux_info **aux)
+ game_aux_info **aux, int interactive)
{
return dupstr("FIXME");
}
--- a/pattern.c
+++ b/pattern.c
@@ -475,7 +475,7 @@
};
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;
--- a/puzzles.h
+++ b/puzzles.h
@@ -214,7 +214,7 @@
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);
--- a/rect.c
+++ b/rect.c
@@ -1054,7 +1054,7 @@
};
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;
--- a/sixteen.c
+++ b/sixteen.c
@@ -194,7 +194,7 @@
}
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;
--- a/solo.c
+++ b/solo.c
@@ -1397,7 +1397,7 @@
};
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;
--- a/twiddle.c
+++ b/twiddle.c
@@ -308,7 +308,7 @@
}
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;