Added an `interactive' flag to new_game_desc(), which toggles Mines
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Mon, 30 May 2005 18:41:40 +0000 (18:41 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Mon, 30 May 2005 18:41:40 +0000 (18:41 +0000)
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

14 files changed:
cube.c
fifteen.c
gtk.c
midend.c
mines.c
net.c
netslide.c
nullgame.c
pattern.c
puzzles.h
rect.c
sixteen.c
solo.c
twiddle.c

diff --git a/cube.c b/cube.c
index a65b918..2bce1bd 100644 (file)
--- 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;
index bbdb939..e7a41ef 100644 (file)
--- 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 (file)
--- 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)
index 8adc1c3..e8bcd20 100644 (file)
--- 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 (file)
--- 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 (file)
--- 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;
index bf5fc75..324946e 100644 (file)
@@ -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;
index abb6cc5..3ec6b75 100644 (file)
@@ -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");
 }
index c5fd9dc..419e4aa 100644 (file)
--- 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;
index f3db36f..4ee718e 100644 (file)
--- 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 (file)
--- 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;
index 1871e5f..fe3e8d1 100644 (file)
--- 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 (file)
--- 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;
index 2523920..f6c8f4d 100644 (file)
--- 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;