chiark / gitweb /
Stop the Pattern grid generation from generating an entire row or
authorSimon Tatham <anakin@pobox.com>
Thu, 24 Feb 2005 09:13:06 +0000 (09:13 +0000)
committerSimon Tatham <anakin@pobox.com>
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!

[originally from svn r5391]

pattern.c

index 66ed1348a3984c8f0a05b79412be826aee3f825a..4fc1562365d2dd73833f57e108c3b5bdb4995440 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 {