mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 08:01:30 -07:00
Fixes in grid generation for pedantic special cases when one or both
grid dimensions are very small. [originally from svn r5390]
This commit is contained in:
11
pattern.c
11
pattern.c
@ -281,6 +281,15 @@ static void generate(random_state *rs, int w, int h, unsigned char *retgrid)
|
|||||||
for (q = -1; q <= +1; q++) {
|
for (q = -1; q <= +1; q++) {
|
||||||
if (i+p < 0 || i+p >= h || j+q < 0 || j+q >= w)
|
if (i+p < 0 || i+p >= h || j+q < 0 || j+q >= w)
|
||||||
continue;
|
continue;
|
||||||
|
/*
|
||||||
|
* An additional special case not mentioned
|
||||||
|
* above: if a grid dimension is 2xn then
|
||||||
|
* we do not average across that dimension
|
||||||
|
* at all. Otherwise a 2x2 grid would
|
||||||
|
* contain four identical squares.
|
||||||
|
*/
|
||||||
|
if ((h==2 && p!=0) || (w==2 && q!=0))
|
||||||
|
continue;
|
||||||
n++;
|
n++;
|
||||||
sx += fgrid[(i+p)*w+(j+q)];
|
sx += fgrid[(i+p)*w+(j+q)];
|
||||||
}
|
}
|
||||||
@ -303,7 +312,7 @@ static void generate(random_state *rs, int w, int h, unsigned char *retgrid)
|
|||||||
|
|
||||||
for (i = 0; i < h; i++) {
|
for (i = 0; i < h; i++) {
|
||||||
for (j = 0; j < w; j++) {
|
for (j = 0; j < w; j++) {
|
||||||
retgrid[i*w+j] = (fgrid[i*w+j] > threshold ? GRID_FULL :
|
retgrid[i*w+j] = (fgrid[i*w+j] >= threshold ? GRID_FULL :
|
||||||
GRID_EMPTY);
|
GRID_EMPTY);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user