Disable shuffle overlap checking in the special case w=h=n.
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Fri, 10 Jun 2005 11:34:02 +0000 (11:34 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Fri, 10 Jun 2005 11:34:02 +0000 (11:34 +0000)
git-svn-id: svn://svn.tartarus.org/sgt/puzzles@5940 cda61777-01e9-0310-a592-d414129be87e

twiddle.c

index 8388f47..58b4cb5 100644 (file)
--- a/twiddle.c
+++ b/twiddle.c
@@ -363,7 +363,14 @@ static char *new_game_desc(game_params *params, random_state *rs,
                  */
                 oldtotal = prevmoves[y*rw+x];
                 newtotal = oldtotal + r;
-            } while (abs(newtotal) < abs(oldtotal) || abs(newtotal) > 2);
+                
+                /*
+                 * Special case here for w==h==n, in which case
+                 * there is actually no way to _avoid_ all moves
+                 * repeating or undoing previous ones.
+                 */
+            } while ((w != n || h != n) &&
+                     (abs(newtotal) < abs(oldtotal) || abs(newtotal) > 2));
 
             do_rotate(grid, w, h, n, params->orientable, x, y, r);