~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
The Light Up solver limits its recursion depth, so if it fails to find
[sgt/puzzles]
/
towers.c
diff --git
a/towers.c
b/towers.c
index
f06f2ad
..
be0a730
100644
(file)
--- a/
towers.c
+++ b/
towers.c
@@
-1225,14
+1225,13
@@
static int check_errors(game_state *state, int *errors)
}
for (i = 0; i < 4*w; i++) {
}
for (i = 0; i < 4*w; i++) {
- int start, step, j,
k,
n, best;
+ int start, step, j, n, best;
STARTSTEP(start, step, i, w);
if (!clues[i])
continue;
best = n = 0;
STARTSTEP(start, step, i, w);
if (!clues[i])
continue;
best = n = 0;
- k = 0;
for (j = 0; j < w; j++) {
int number = grid[start+j*step];
if (!number)
for (j = 0; j < w; j++) {
int number = grid[start+j*step];
if (!number)
@@
-1290,10
+1289,11
@@
static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
(x - ox >= 0 && x - ox < TILESIZE &&
y - oy >= 0 && y - oy < TILESIZE) ||
/* in triangle between top-left corners? */
(x - ox >= 0 && x - ox < TILESIZE &&
y - oy >= 0 && y - oy < TILESIZE) ||
/* in triangle between top-left corners? */
- (ox > bx && x >= bx && x <= ox &&
+ (ox > bx && x >= bx && x <= ox &&
y <= by &&
(by-y) * (ox-bx) <= (by-oy) * (x-bx)) ||
/* in triangle between bottom-right corners? */
(ox > bx && x >= bx+TILESIZE && x <= ox+TILESIZE &&
(by-y) * (ox-bx) <= (by-oy) * (x-bx)) ||
/* in triangle between bottom-right corners? */
(ox > bx && x >= bx+TILESIZE && x <= ox+TILESIZE &&
+ y >= oy+TILESIZE &&
(by-y+TILESIZE)*(ox-bx) >= (by-oy)*(x-bx-TILESIZE))) {
tx = cx;
ty = cy;
(by-y+TILESIZE)*(ox-bx) >= (by-oy)*(x-bx-TILESIZE))) {
tx = cx;
ty = cy;
@@
-1524,12
+1524,14
@@
static void draw_tile(drawing *dr, game_drawstate *ds, struct clues *clues,
int x, int y, long tile)
{
int w = clues->w /* , a = w*w */;
int x, int y, long tile)
{
int w = clues->w /* , a = w*w */;
- int tx, ty;
+ int tx, ty
, bg
;
char str[64];
tx = COORD(x);
ty = COORD(y);
char str[64];
tx = COORD(x);
ty = COORD(y);
+ bg = (tile & DF_HIGHLIGHT) ? COL_HIGHLIGHT : COL_BACKGROUND;
+
/* draw tower */
if (ds->three_d && (tile & DF_PLAYAREA) && (tile & DF_DIGIT_MASK)) {
int coords[8];
/* draw tower */
if (ds->three_d && (tile & DF_PLAYAREA) && (tile & DF_DIGIT_MASK)) {
int coords[8];
@@
-1545,7
+1547,7
@@
static void draw_tile(drawing *dr, game_drawstate *ds, struct clues *clues,
coords[5] = coords[3] - yoff;
coords[6] = coords[0] + xoff;
coords[7] = coords[1] - yoff;
coords[5] = coords[3] - yoff;
coords[6] = coords[0] + xoff;
coords[7] = coords[1] - yoff;
- draw_polygon(dr, coords, 4,
COL_BACKGROUND
, COL_GRID);
+ draw_polygon(dr, coords, 4,
bg
, COL_GRID);
/* bottom face of tower */
coords[0] = tx + TILESIZE;
/* bottom face of tower */
coords[0] = tx + TILESIZE;
@@
-1556,7
+1558,7
@@
static void draw_tile(drawing *dr, game_drawstate *ds, struct clues *clues,
coords[5] = coords[3] - yoff;
coords[6] = coords[0] + xoff;
coords[7] = coords[1] - yoff;
coords[5] = coords[3] - yoff;
coords[6] = coords[0] + xoff;
coords[7] = coords[1] - yoff;
- draw_polygon(dr, coords, 4,
COL_BACKGROUND
, COL_GRID);
+ draw_polygon(dr, coords, 4,
bg
, COL_GRID);
/* now offset all subsequent drawing to the top of the tower */
tx += xoff;
/* now offset all subsequent drawing to the top of the tower */
tx += xoff;
@@
-1564,8
+1566,7
@@
static void draw_tile(drawing *dr, game_drawstate *ds, struct clues *clues,
}
/* erase background */
}
/* erase background */
- draw_rect(dr, tx, ty, TILESIZE, TILESIZE,
- (tile & DF_HIGHLIGHT) ? COL_HIGHLIGHT : COL_BACKGROUND);
+ draw_rect(dr, tx, ty, TILESIZE, TILESIZE, bg);
/* pencil-mode highlight */
if (tile & DF_HIGHLIGHT_PENCIL) {
/* pencil-mode highlight */
if (tile & DF_HIGHLIGHT_PENCIL) {
@@
-1807,6
+1808,11
@@
static float game_flash_length(game_state *oldstate, game_state *newstate,
return 0.0F;
}
return 0.0F;
}
+static int game_status(game_state *state)
+{
+ return state->completed ? +1 : 0;
+}
+
static int game_timing_state(game_state *state, game_ui *ui)
{
if (state->completed)
static int game_timing_state(game_state *state, game_ui *ui)
{
if (state->completed)
@@
-1926,6
+1932,7
@@
const struct game thegame = {
game_redraw,
game_anim_length,
game_flash_length,
game_redraw,
game_anim_length,
game_flash_length,
+ game_status,
TRUE, FALSE, game_print_size, game_print,
FALSE, /* wants_statusbar */
FALSE, game_timing_state,
TRUE, FALSE, game_print_size, game_print,
FALSE, /* wants_statusbar */
FALSE, game_timing_state,