From 15f00e064a52e87a78e925c764221dcbd15b6bed Mon Sep 17 00:00:00 2001 From: simon Date: Thu, 24 Feb 2005 09:13:06 +0000 Subject: [PATCH] Stop the Pattern grid generation from generating an entire row or 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 | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) 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 { -- 2.11.0