Stop the Pattern grid generation from generating an entire row or
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Thu, 24 Feb 2005 09:13:06 +0000 (09:13 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Thu, 24 Feb 2005 09:13:06 +0000 (09:13 +0000)
column of the same colour (at least when the dimensions are big
enough to make this feasible). It's a little bit too easy otherwise!

git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5391 cda61777-01e9-0310-a592-d414129be87e

pattern.c

index 66ed134..4fc1562 100644 (file)
--- a/pattern.c
+++ b/pattern.c
@@ -417,6 +417,34 @@ static unsigned char *generate_soluble(random_state *rs, int w, int h)
 
         generate(rs, w, h, grid);
 
+        /*
+         * The game is a bit too easy if any row or column is
+         * completely black or completely white. An exception is
+         * made for rows/columns that are under 3 squares,
+         * otherwise nothing will ever be successfully generated.
+         */
+        ok = TRUE;
+        if (w > 2) {
+            for (i = 0; i < h; i++) {
+                int colours = 0;
+                for (j = 0; j < w; j++)
+                    colours |= (grid[i*w+j] == GRID_FULL ? 2 : 1);
+                if (colours != 3)
+                    ok = FALSE;
+            }
+        }
+        if (h > 2) {
+            for (j = 0; j < w; j++) {
+                int colours = 0;
+                for (i = 0; i < h; i++)
+                    colours |= (grid[i*w+j] == GRID_FULL ? 2 : 1);
+                if (colours != 3)
+                    ok = FALSE;
+            }
+        }
+        if (!ok)
+            continue;
+
         memset(matrix, 0, w*h);
 
         do {