Kyle Brazell points out that the completion checker considers a
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Fri, 23 Mar 2007 18:08:21 +0000 (18:08 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Fri, 23 Mar 2007 18:08:21 +0000 (18:08 +0000)
region valid if it has _a_ dot at its centre of symmetry, even if
that dot isn't actually within the region in question.

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

galaxies.c

index 24adf1e..5e75981 100644 (file)
@@ -2622,10 +2622,16 @@ static int check_complete(game_state *state, int *dsf, int *colours)
      */
     for (i = 0; i < w*h; i++)
         if (sqdata[i].valid) {
-            sqdata[i].cx = sqdata[i].minx + sqdata[i].maxx + 1;
-            sqdata[i].cy = sqdata[i].miny + sqdata[i].maxy + 1;
+            int cx, cy;
+            cx = sqdata[i].cx = sqdata[i].minx + sqdata[i].maxx + 1;
+            cy = sqdata[i].cy = sqdata[i].miny + sqdata[i].maxy + 1;
             if (!(SPACE(state, sqdata[i].cx, sqdata[i].cy).flags & F_DOT))
                 sqdata[i].valid = FALSE;   /* no dot at centre of symmetry */
+            if (dsf_canonify(dsf, (cy-1)/2*w+(cx-1)/2) != i ||
+                dsf_canonify(dsf, (cy)/2*w+(cx-1)/2) != i ||
+                dsf_canonify(dsf, (cy-1)/2*w+(cx)/2) != i ||
+                dsf_canonify(dsf, (cy)/2*w+(cx)/2) != i)
+                sqdata[i].valid = FALSE;   /* dot at cx,cy isn't ours */
             if (SPACE(state, sqdata[i].cx, sqdata[i].cy).flags & F_DOT_BLACK)
                 sqdata[i].colour = 2;
             else