summaryrefslogtreecommitdiff
path: root/test/sudoku.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'test/sudoku.cxx')
-rw-r--r--test/sudoku.cxx273
1 files changed, 137 insertions, 136 deletions
diff --git a/test/sudoku.cxx b/test/sudoku.cxx
index 010a9c5ef..d5edb05c5 100644
--- a/test/sudoku.cxx
+++ b/test/sudoku.cxx
@@ -547,7 +547,6 @@ SudokuCell::handle(int event) {
case FL_UNFOCUS :
redraw();
return 1;
- break;
case FL_PUSH :
if (!readonly() && Fl::event_inside(this)) {
@@ -630,7 +629,7 @@ Fl_Preferences Sudoku::prefs_(Fl_Preferences::USER, "fltk.org", "sudoku");
Sudoku::Sudoku()
: Fl_Window(GROUP_SIZE * 3, GROUP_SIZE * 3 + MENU_OFFSET, "Sudoku")
{
- int i, j;
+ int j, k;
Fl_Group *g;
SudokuCell *cell;
static Fl_Menu_Item items[] = {
@@ -657,8 +656,8 @@ Sudoku::Sudoku()
// Setup sound output...
- prefs_.get("mute_sound", i, 0);
- if (i) {
+ prefs_.get("mute_sound", j, 0);
+ if (j) {
// Mute sound?
sound_ = NULL;
items[6].flags |= FL_MENU_VALUE;
@@ -676,27 +675,27 @@ Sudoku::Sudoku()
// Create the grids...
grid_ = new Fl_Group(0, MENU_OFFSET, 3 * GROUP_SIZE, 3 * GROUP_SIZE);
- for (i = 0; i < 3; i ++)
- for (j = 0; j < 3; j ++) {
- g = new Fl_Group(j * GROUP_SIZE, i * GROUP_SIZE + MENU_OFFSET,
+ for (j = 0; j < 3; j ++)
+ for (k = 0; k < 3; k ++) {
+ g = new Fl_Group(k * GROUP_SIZE, j * GROUP_SIZE + MENU_OFFSET,
GROUP_SIZE, GROUP_SIZE);
g->box(FL_BORDER_BOX);
- if ((i == 1) ^ (j == 1)) g->color(FL_DARK3);
+ if ((int)(j == 1) ^ (int)(k == 1)) g->color(FL_DARK3);
else g->color(FL_DARK2);
g->end();
- grid_groups_[i][j] = g;
+ grid_groups_[j][k] = g;
}
- for (i = 0; i < 9; i ++)
- for (j = 0; j < 9; j ++) {
- cell = new SudokuCell(j * CELL_SIZE + CELL_OFFSET +
- (j / 3) * (GROUP_SIZE - 3 * CELL_SIZE),
- i * CELL_SIZE + CELL_OFFSET + MENU_OFFSET +
- (i / 3) * (GROUP_SIZE - 3 * CELL_SIZE),
+ for (j = 0; j < 9; j ++)
+ for (k = 0; k < 9; k ++) {
+ cell = new SudokuCell(k * CELL_SIZE + CELL_OFFSET +
+ (k / 3) * (GROUP_SIZE - 3 * CELL_SIZE),
+ j * CELL_SIZE + CELL_OFFSET + MENU_OFFSET +
+ (j / 3) * (GROUP_SIZE - 3 * CELL_SIZE),
CELL_SIZE, CELL_SIZE);
cell->callback(reset_cb);
- grid_cells_[i][j] = cell;
+ grid_cells_[j][k] = cell;
}
// Set icon for window (MacOS uses app bundle for icon...)
@@ -749,23 +748,23 @@ void
Sudoku::check_game(bool highlight) {
bool empty = false;
bool correct = true;
- int i, j, k;
+ int j, k, m;
// Check the game for right/wrong answers...
- for (i = 0; i < 9; i ++)
- for (j = 0; j < 9; j ++) {
- SudokuCell *cell = grid_cells_[i][j];
+ for (j = 0; j < 9; j ++)
+ for (k = 0; k < 9; k ++) {
+ SudokuCell *cell = grid_cells_[j][k];
int val = cell->value();
if (cell->readonly()) continue;
if (!val) empty = true;
else {
- for (k = 0; k < 9; k ++)
- if ((i != k && grid_cells_[k][j]->value() == val) ||
- (j != k && grid_cells_[i][k]->value() == val)) break;
+ for (m = 0; m < 9; m ++)
+ if ((j != m && grid_cells_[m][k]->value() == val) ||
+ (k != m && grid_cells_[j][m]->value() == val)) break;
- if (k < 9) {
+ if (m < 9) {
if (highlight) {
cell->color(FL_YELLOW);
cell->redraw();
@@ -780,28 +779,28 @@ Sudoku::check_game(bool highlight) {
}
// Check subgrids for duplicate numbers...
- for (i = 0; i < 9; i += 3)
- for (j = 0; j < 9; j += 3)
- for (int ii = 0; ii < 3; ii ++)
- for (int jj = 0; jj < 3; jj ++) {
- SudokuCell *cell = grid_cells_[i + ii][j + jj];
+ for (j = 0; j < 9; j += 3)
+ for (k = 0; k < 9; k += 3)
+ for (int jj = 0; jj < 3; jj ++)
+ for (int kk = 0; kk < 3; kk ++) {
+ SudokuCell *cell = grid_cells_[j + jj][k + kk];
int val = cell->value();
if (cell->readonly() || !val) continue;
- int iii;
+ int jjj;
- for (iii = 0; iii < 3; iii ++) {
- int jjj;
+ for (jjj = 0; jjj < 3; jjj ++) {
+ int kkk;
- for (jjj = 0; jjj < 3; jjj ++)
- if (ii != iii && jj != jjj &&
- grid_cells_[i + iii][j + jjj]->value() == val) break;
+ for (kkk = 0; kkk < 3; kkk ++)
+ if (jj != jjj && kk != kkk &&
+ grid_cells_[j + jjj][k + kkk]->value() == val) break;
- if (jjj < 3) break;
+ if (kkk < 3) break;
}
- if (iii < 3) {
+ if (jjj < 3) {
if (highlight) {
cell->color(FL_YELLOW);
cell->redraw();
@@ -813,14 +812,14 @@ Sudoku::check_game(bool highlight) {
if (!empty && correct) {
// Success!
- for (i = 0; i < 9; i ++) {
- for (j = 0; j < 9; j ++) {
- SudokuCell *cell = grid_cells_[i][j];
+ for (j = 0; j < 9; j ++) {
+ for (k = 0; k < 9; k ++) {
+ SudokuCell *cell = grid_cells_[j][k];
cell->color(FL_GREEN);
cell->readonly(1);
}
- if (sound_) sound_->play('A' + grid_cells_[i][8]->value() - 1);
+ if (sound_) sound_->play('A' + grid_cells_[j][8]->value() - 1);
}
}
}
@@ -879,50 +878,52 @@ Sudoku::update_helpers_cb(Fl_Widget *widget, void *) {
void
Sudoku::update_helpers() {
- int i, j, k;
- // first we delete any entries that the user may have made
- for (i=0; i<9; i++) {
- for (j=0; j<9; j++) {
- SudokuCell *cell = grid_cells_[i][j];
- for (k = 0; k < 8; k++) {
- cell->test_value(0, k);
+ int j, k, m;
+
+ // First we delete any entries that the user may have made
+ for (j = 0; j < 9; j ++) {
+ for (k = 0; k < 9; k ++) {
+ SudokuCell *cell = grid_cells_[j][k];
+ for (m = 0; m < 8; m ++) {
+ cell->test_value(0, m);
}
}
}
- // now go through all cells and find out, what we can not be
- for (i=0; i<81; i++) {
+
+ // Now go through all cells and find out, what we can not be
+ for (j = 0; j < 81; j ++) {
char taken[10] = { 0 };
- // find our destination cell
- int row = i/9;
- int col = i%9;
+ // Find our destination cell
+ int row = j / 9;
+ int col = j % 9;
SudokuCell *dst_cell = grid_cells_[row][col];
if (dst_cell->value()) continue;
- // find all values already taken in this row
- for (j=0; j<9; j++) {
- SudokuCell *cell = grid_cells_[row][j];
+ // Find all values already taken in this row
+ for (k = 0; k < 9; k ++) {
+ SudokuCell *cell = grid_cells_[row][k];
int v = cell->value();
if (v) taken[v] = 1;
}
- // find all values already taken in this column
- for (j=0; j<9; j++) {
- SudokuCell *cell = grid_cells_[j][col];
+ // Find all values already taken in this column
+ for (k = 0; k < 9; k ++) {
+ SudokuCell *cell = grid_cells_[k][col];
int v = cell->value();
if (v) taken[v] = 1;
}
- // now find all values already taken in this sqare
- int ro = (row/3) * 3;
- int co = (col/3) * 3;
- for (j=0; j<3; j++) {
- for (k=0; k<3; k++) {
- SudokuCell *cell = grid_cells_[ro+j][co+k];
+ // Now find all values already taken in this square
+ int ro = (row / 3) * 3;
+ int co = (col / 3) * 3;
+ for (k = 0; k < 3; k ++) {
+ for (m = 0; m < 3; m ++) {
+ SudokuCell *cell = grid_cells_[ro + j][co + k];
int v = cell->value();
if (v) taken[v] = 1;
}
}
// transfer our findings to the markers
- for (k = 1, j = 0; k <= 9; k++) {
+ for (m = 1, k = 0; m <= 9; m ++) {
if (!taken[k])
- dst_cell->test_value(k, j++);
+ dst_cell->test_value(m, k ++);
}
}
}
@@ -994,27 +995,27 @@ Sudoku::load_game() {
bool solved = true;
- for (int i = 0; i < 9; i ++)
- for (int j = 0; j < 9; j ++) {
+ for (int j = 0; j < 9; j ++)
+ for (int k = 0; k < 9; k ++) {
char name[255];
int val;
- SudokuCell *cell = grid_cells_[i][j];
+ SudokuCell *cell = grid_cells_[j][k];
- sprintf(name, "value%d.%d", i, j);
+ sprintf(name, "value%d.%d", j, k);
if (!prefs_.get(name, val, 0)) {
- i = 9;
+ j = 9;
grid_values_[0][0] = 0;
break;
}
- grid_values_[i][j] = val;
+ grid_values_[j][k] = val;
- sprintf(name, "state%d.%d", i, j);
+ sprintf(name, "state%d.%d", j, k);
prefs_.get(name, val, 0);
cell->value(val);
- sprintf(name, "readonly%d.%d", i, j);
+ sprintf(name, "readonly%d.%d", j, k);
prefs_.get(name, val, 0);
cell->readonly(val);
@@ -1024,10 +1025,10 @@ Sudoku::load_game() {
solved = false;
}
- for (int k = 0; k < 8; k ++) {
- sprintf(name, "test%d%d.%d", k, i, j);
+ for (int m = 0; m < 8; m ++) {
+ sprintf(name, "test%d%d.%d", m, j, k);
prefs_.get(name, val, 0);
- cell->test_value(val, k);
+ cell->test_value(val, m);
}
}
@@ -1072,7 +1073,7 @@ Sudoku::new_cb(Fl_Widget *widget, void *) {
// Create a new game...
void
Sudoku::new_game(time_t seed) {
- int i, j, k, m, t, count;
+ int j, k, m, n, t, count;
// Generate a new (valid) Sudoku grid...
@@ -1081,36 +1082,36 @@ Sudoku::new_game(time_t seed) {
memset(grid_values_, 0, sizeof(grid_values_));
- for (i = 0; i < 9; i += 3) {
- for (j = 0; j < 9; j += 3) {
+ for (j = 0; j < 9; j += 3) {
+ for (k = 0; k < 9; k += 3) {
for (t = 1; t <= 9; t ++) {
for (count = 0; count < 20; count ++) {
- k = i + (rand() % 3);
m = j + (rand() % 3);
- if (!grid_values_[k][m]) {
- int kk;
-
- for (kk = 0; kk < k; kk ++)
- if (grid_values_[kk][m] == t) break;
-
- if (kk < k) continue;
-
+ n = k + (rand() % 3);
+ if (!grid_values_[m][n]) {
int mm;
for (mm = 0; mm < m; mm ++)
- if (grid_values_[k][mm] == t) break;
+ if (grid_values_[mm][n] == t) break;
if (mm < m) continue;
- grid_values_[k][m] = t;
+ int nn;
+
+ for (nn = 0; nn < n; nn ++)
+ if (grid_values_[m][nn] == t) break;
+
+ if (nn < n) continue;
+
+ grid_values_[m][n] = t;
break;
}
}
if (count == 20) {
// Unable to find a valid puzzle so far, so start over...
- j = 9;
- i = -3;
+ k = 9;
+ j = -3;
memset(grid_values_, 0, sizeof(grid_values_));
}
}
@@ -1120,9 +1121,9 @@ Sudoku::new_game(time_t seed) {
// Start by making all cells editable
SudokuCell *cell;
- for (i = 0; i < 9; i ++)
- for (j = 0; j < 9; j ++) {
- cell = grid_cells_[i][j];
+ for (j = 0; j < 9; j ++)
+ for (k = 0; k < 9; k ++) {
+ cell = grid_cells_[j][k];
cell->value(0);
cell->readonly(0);
@@ -1134,10 +1135,10 @@ Sudoku::new_game(time_t seed) {
int numbers[9];
- for (i = 0; i < 9; i ++) numbers[i] = i + 1;
+ for (j = 0; j < 9; j ++) numbers[j] = j + 1;
while (count > 0) {
- for (i = 0; i < 20; i ++) {
+ for (j = 0; j < 20; j ++) {
k = rand() % 9;
m = rand() % 9;
t = numbers[k];
@@ -1145,14 +1146,14 @@ Sudoku::new_game(time_t seed) {
numbers[m] = t;
}
- for (i = 0; count > 0 && i < 9; i ++) {
- t = numbers[i];
+ for (j = 0; count > 0 && j < 9; j ++) {
+ t = numbers[j];
- for (j = 0; count > 0 && j < 9; j ++) {
- cell = grid_cells_[i][j];
+ for (k = 0; count > 0 && k < 9; k ++) {
+ cell = grid_cells_[j][k];
- if (grid_values_[i][j] == t && !cell->readonly()) {
- cell->value(grid_values_[i][j]);
+ if (grid_values_[j][k] == t && !cell->readonly()) {
+ cell->value(grid_values_[j][k]);
cell->readonly(1);
cell->color(FL_GRAY);
@@ -1168,33 +1169,33 @@ Sudoku::new_game(time_t seed) {
// Return the next available value for a cell...
int
Sudoku::next_value(SudokuCell *c) {
- int i, j, k, m;
+ int j, k, m, n;
- for (i = 0; i < 9; i ++) {
- for (j = 0; j < 9; j ++)
- if (grid_cells_[i][j] == c) break;
+ for (j = 0; j < 9; j ++) {
+ for (k = 0; k < 9; k ++)
+ if (grid_cells_[j][k] == c) break;
- if (j < 9) break;
+ if (k < 9) break;
}
- if (i == 9) return 1;
+ if (j == 9) return 1;
- i -= i % 3;
j -= j % 3;
+ k -= k % 3;
int numbers[9];
memset(numbers, 0, sizeof(numbers));
- for (k = 0; k < 3; k ++)
- for (m = 0; m < 3; m ++) {
- c = grid_cells_[i + k][j + m];
+ for (m = 0; m < 3; m ++)
+ for (n = 0; n < 3; n ++) {
+ c = grid_cells_[j + m][k + n];
if (c->value()) numbers[c->value() - 1] = 1;
}
- for (i = 0; i < 9; i ++)
- if (!numbers[i]) return i + 1;
+ for (j = 0; j < 9; j ++)
+ if (!numbers[j]) return j + 1;
return 1;
}
@@ -1230,9 +1231,9 @@ Sudoku::restart_cb(Fl_Widget *widget, void *) {
Sudoku *s = (Sudoku *)(widget->window());
bool solved = true;
- for (int i = 0; i < 9; i ++)
- for (int j = 0; j < 9; j ++) {
- SudokuCell *cell = s->grid_cells_[i][j];
+ for (int j = 0; j < 9; j ++)
+ for (int k = 0; k < 9; k ++) {
+ SudokuCell *cell = s->grid_cells_[j][k];
if (!cell->readonly()) {
solved = false;
@@ -1251,23 +1252,23 @@ Sudoku::restart_cb(Fl_Widget *widget, void *) {
void
Sudoku::save_game() {
// Save the current values and state of each grid...
- for (int i = 0; i < 9; i ++)
- for (int j = 0; j < 9; j ++) {
+ for (int j = 0; j < 9; j ++)
+ for (int k = 0; k < 9; k ++) {
char name[255];
- SudokuCell *cell = grid_cells_[i][j];
+ SudokuCell *cell = grid_cells_[j][k];
- sprintf(name, "value%d.%d", i, j);
- prefs_.set(name, grid_values_[i][j]);
+ sprintf(name, "value%d.%d", j, k);
+ prefs_.set(name, grid_values_[j][k]);
- sprintf(name, "state%d.%d", i, j);
+ sprintf(name, "state%d.%d", j, k);
prefs_.set(name, cell->value());
- sprintf(name, "readonly%d.%d", i, j);
+ sprintf(name, "readonly%d.%d", j, k);
prefs_.set(name, cell->readonly());
- for (int k = 0; k < 8; k ++) {
- sprintf(name, "test%d%d.%d", k, i, j);
- prefs_.set(name, cell->test_value(k));
+ for (int m = 0; m < 8; m ++) {
+ sprintf(name, "test%d%d.%d", m, j, k);
+ prefs_.set(name, cell->test_value(m));
}
}
}
@@ -1297,18 +1298,18 @@ Sudoku::solve_cb(Fl_Widget *widget, void *) {
// Solve the puzzle...
void
Sudoku::solve_game() {
- int i, j;
+ int j, k;
- for (i = 0; i < 9; i ++) {
- for (j = 0; j < 9; j ++) {
- SudokuCell *cell = grid_cells_[i][j];
+ for (j = 0; j < 9; j ++) {
+ for (k = 0; k < 9; k ++) {
+ SudokuCell *cell = grid_cells_[j][k];
- cell->value(grid_values_[i][j]);
+ cell->value(grid_values_[j][k]);
cell->readonly(1);
cell->color(FL_GRAY);
}
- if (sound_) sound_->play('A' + grid_cells_[i][8]->value() - 1);
+ if (sound_) sound_->play('A' + grid_cells_[j][8]->value() - 1);
}
}