Minor improvement to initial loop generation.
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 11 Sep 2005 18:05:23 +0000 (18:05 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sun, 11 Sep 2005 18:05:23 +0000 (18:05 +0000)
git-svn-id: svn://svn.tartarus.org/sgt/puzzles@6292 cda61777-01e9-0310-a592-d414129be87e

loopy.c

diff --git a/loopy.c b/loopy.c
index f4d3e6a..42e7856 100644 (file)
--- a/loopy.c
+++ b/loopy.c
@@ -764,7 +764,16 @@ static char *new_fullyclued_board(game_params *params, random_state *rs)
         square = (struct square *)index234(lightable_squares_sorted, 0);
         assert(square);
 
-        if (square->score <= 0)
+       /*
+        * We never want to _decrease_ the loop's perimeter. Making
+        * moves that leave the perimeter the same is occasionally
+        * useful: if it were _never_ done then the user would be
+        * able to deduce illicitly that any degree-zero vertex was
+        * on the outside of the loop. So we do it sometimes but
+        * not always.
+        */
+        if (square->score < 0 || (square->score == 0 &&
+                                 random_upto(rs, 2) == 0))
             break;
 
         print_tree(lightable_squares_sorted);