diff options
| author | Michael R Sweet <michael.r.sweet@gmail.com> | 2005-11-26 14:25:01 +0000 |
|---|---|---|
| committer | Michael R Sweet <michael.r.sweet@gmail.com> | 2005-11-26 14:25:01 +0000 |
| commit | fd9a51e43b57b61ae1a321b6b4e627388b3179f7 (patch) | |
| tree | d73a5e6e2e4764d34500ab6499d72b01899a55bb | |
| parent | 4a12c536fd180b3d27f49e38262797bd009f5e64 (diff) | |
Fix up new game code to expose at least one of every number in each axis
so puzzles are solvable with a unique solution.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@4657 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | test/sudoku.cxx | 79 |
1 files changed, 46 insertions, 33 deletions
diff --git a/test/sudoku.cxx b/test/sudoku.cxx index f16c43c5b..f5a000505 100644 --- a/test/sudoku.cxx +++ b/test/sudoku.cxx @@ -496,48 +496,61 @@ Sudoku::new_game() { // Show N cells, starting with potential confusing ones... count = difficulty_; - for (i = 0; i < 9; i ++) { - j = rand() % 9; - cell = grid_cells_[i][j]; + int numbers[9]; - for (m = 0; m < 9; m ++) - if (m != j && grid_values_[i][j] == grid_values_[i][m]) { - cell->value(grid_values_[i][j]); - cell->readonly(1); - cell->color(FL_GRAY); + for (i = 0; i < 9; i ++) numbers[i] = i + 1; - count --; - } - } + while (count > 0) { + for (i = 0; i < 20; i ++) { + k = rand() % 9; + m = rand() % 9; + t = numbers[k]; + numbers[k] = numbers[m]; + numbers[m] = t; + } - for (j = 0; j < 9; j ++) { - do { - i = rand() % 9; - cell = grid_cells_[i][j]; - } while (cell->readonly()); + for (i = 0; count > 0 && i < 9; i ++) { + t = numbers[i]; - for (k = 0; k < 9; k ++) - if (k != i && grid_values_[i][j] == grid_values_[k][j]) { - cell->value(grid_values_[i][j]); - cell->readonly(1); - cell->color(FL_GRAY); + for (j = 0; count > 0 && j < 9; j ++) { + cell = grid_cells_[i][j]; - count --; + if (grid_values_[i][j] == t && !cell->readonly()) { + cell->value(grid_values_[i][j]); + cell->readonly(1); + cell->color(FL_GRAY); + + count --; + break; + } } - } + } - // Now show random fields... - while (count > 0) { - i = rand() % 9; - j = rand() % 9; - cell = grid_cells_[i][j]; + if (count <= 0) break; - if (!cell->readonly()) { - cell->value(grid_values_[i][j]); - cell->readonly(1); - cell->color(FL_GRAY); + for (i = 0; i < 20; i ++) { + k = rand() % 9; + m = rand() % 9; + t = numbers[k]; + numbers[k] = numbers[m]; + numbers[m] = t; + } + + for (j = 0; count > 0 && j < 9; j ++) { + t = numbers[j]; - count --; + for (i = 0; count > 0 && i < 9; i ++) { + cell = grid_cells_[i][j]; + + if (grid_values_[i][j] == t && !cell->readonly()) { + cell->value(grid_values_[i][j]); + cell->readonly(1); + cell->color(FL_GRAY); + + count --; + break; + } + } } } } |
