X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=pattern.c;h=4fc1562365d2dd73833f57e108c3b5bdb4995440;hb=f64dcb909da33543b9b5c0f421be84c5c984f503;hp=66ed1348a3984c8f0a05b79412be826aee3f825a;hpb=e500ef963734dcf35ffa146ee917e0e0e09c325c;p=sgt-puzzles.git diff --git a/pattern.c b/pattern.c index 66ed134..4fc1562 100644 --- 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 {