mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
Patch from Jonas Koelker to improve Filling's error highlighting: as
well as marking a region as wrong if it has too many squares for the number written in it, this patch now causes a region to be marked wrong if it has too few squares _and no liberties_, so that it can't just be one the user is intending to enlarge later. [originally from svn r9534]
This commit is contained in:
22
filling.c
22
filling.c
@ -1494,19 +1494,35 @@ static void draw_grid(drawing *dr, game_drawstate *ds, game_state *state,
|
|||||||
/*
|
/*
|
||||||
* Determine what we need to draw in this square.
|
* Determine what we need to draw in this square.
|
||||||
*/
|
*/
|
||||||
int v = state->board[y*w+x];
|
int i = y*w+x, v = state->board[i];
|
||||||
int flags = 0;
|
int flags = 0;
|
||||||
|
|
||||||
if (flashy || !shading) {
|
if (flashy || !shading) {
|
||||||
/* clear all background flags */
|
/* clear all background flags */
|
||||||
} else if (ui && ui->sel && ui->sel[y*w+x]) {
|
} else if (ui && ui->sel && ui->sel[i]) {
|
||||||
flags |= HIGH_BG;
|
flags |= HIGH_BG;
|
||||||
} else if (v) {
|
} else if (v) {
|
||||||
int size = dsf_size(ds->dsf_scratch, y*w+x);
|
int size = dsf_size(ds->dsf_scratch, i);
|
||||||
if (size == v)
|
if (size == v)
|
||||||
flags |= CORRECT_BG;
|
flags |= CORRECT_BG;
|
||||||
else if (size > v)
|
else if (size > v)
|
||||||
flags |= ERROR_BG;
|
flags |= ERROR_BG;
|
||||||
|
else {
|
||||||
|
int rt = dsf_canonify(ds->dsf_scratch, i), j;
|
||||||
|
for (j = 0; j < w*h; ++j) {
|
||||||
|
int k;
|
||||||
|
if (dsf_canonify(ds->dsf_scratch, j) != rt) continue;
|
||||||
|
for (k = 0; k < 4; ++k) {
|
||||||
|
const int xx = j % w + dx[k], yy = j / w + dy[k];
|
||||||
|
if (xx >= 0 && xx < w && yy >= 0 && yy < h &&
|
||||||
|
state->board[yy*w + xx] == EMPTY)
|
||||||
|
goto noflag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
flags |= ERROR_BG;
|
||||||
|
noflag:
|
||||||
|
;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (ui && ui->cur_visible && x == ui->cur_x && y == ui->cur_y)
|
if (ui && ui->cur_visible && x == ui->cur_x && y == ui->cur_y)
|
||||||
flags |= CURSOR_SQ;
|
flags |= CURSOR_SQ;
|
||||||
|
Reference in New Issue
Block a user