~mdw
/
sgt
/
puzzles
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Disallow clicks between squares.
[sgt/puzzles]
/
unequal.c
diff --git
a/unequal.c
b/unequal.c
index
81720e4
..
acc33d7
100644
(file)
--- a/
unequal.c
+++ b/
unequal.c
@@
-880,7
+880,7
@@
static int gg_best_clue(game_state *state, int *scratch, digit *latin)
}
#endif
}
#endif
- for (i =
0; i < ls; i++
) {
+ for (i =
ls; i-- > 0 ;
) {
if (!gg_place_clue(state, scratch[i], latin, 1)) continue;
loc = scratch[i] / 5;
if (!gg_place_clue(state, scratch[i], latin, 1)) continue;
loc = scratch[i] / 5;
@@
-896,7
+896,7
@@
static int gg_best_clue(game_state *state, int *scratch, digit *latin)
best = i; maxposs = nposs; minclues = nclues;
#ifdef STANDALONE_SOLVER
if (solver_show_working)
best = i; maxposs = nposs; minclues = nclues;
#ifdef STANDALONE_SOLVER
if (solver_show_working)
- printf("gg_best_clue: b%d (%d,%d) new best [%d poss, %d clues].",
+ printf("gg_best_clue: b%d (%d,%d) new best [%d poss, %d clues].
\n
",
best, x, y, nposs, nclues);
#endif
}
best, x, y, nposs, nclues);
#endif
}
@@
-971,7
+971,8
@@
static void game_strip(game_state *new, int *scratch, digit *latin,
gg_solved++;
if (solver_state(copy, difficulty) != 1) {
/* put clue back, we can't solve without it. */
gg_solved++;
if (solver_state(copy, difficulty) != 1) {
/* put clue back, we can't solve without it. */
- assert(gg_place_clue(new, scratch[i], latin, 0) == 1);
+ int ret = gg_place_clue(new, scratch[i], latin, 0);
+ assert(ret == 1);
} else {
#ifdef STANDALONE_SOLVER
if (solver_show_working)
} else {
#ifdef STANDALONE_SOLVER
if (solver_show_working)
@@
-995,14
+996,15
@@
static char *new_game_desc(game_params *params, random_state *rs,
{
digit *sq = NULL;
int i, x, y, retlen, k, nsol;
{
digit *sq = NULL;
int i, x, y, retlen, k, nsol;
- int o2 = params->order * params->order, ntries =
0
;
+ int o2 = params->order * params->order, ntries =
1
;
int *scratch, lscratch = o2*5;
char *ret, buf[80];
game_state *state = blank_game(params->order);
/* Generate a list of 'things to strip' (randomised later) */
scratch = snewn(lscratch, int);
int *scratch, lscratch = o2*5;
char *ret, buf[80];
game_state *state = blank_game(params->order);
/* Generate a list of 'things to strip' (randomised later) */
scratch = snewn(lscratch, int);
- for (i = 0; i < lscratch; i++) scratch[i] = i;
+ /* Put the numbers (4 mod 5) before the inequalities (0-3 mod 5) */
+ for (i = 0; i < lscratch; i++) scratch[i] = (i%o2)*5 + 4 - (i/o2);
generate:
#ifdef STANDALONE_SOLVER
generate:
#ifdef STANDALONE_SOLVER
@@
-1013,7
+1015,9
@@
generate:
if (sq) sfree(sq);
sq = latin_generate(params->order, rs);
latin_debug(sq, params->order);
if (sq) sfree(sq);
sq = latin_generate(params->order, rs);
latin_debug(sq, params->order);
- shuffle(scratch, lscratch, sizeof(int), rs);
+ /* Separately shuffle the numeric and inequality clues */
+ shuffle(scratch, lscratch/5, sizeof(int), rs);
+ shuffle(scratch+lscratch/5, 4*lscratch/5, sizeof(int), rs);
memset(state->nums, 0, o2 * sizeof(digit));
memset(state->flags, 0, o2 * sizeof(unsigned int));
memset(state->nums, 0, o2 * sizeof(digit));
memset(state->flags, 0, o2 * sizeof(unsigned int));
@@
-1030,7
+1034,7
@@
generate:
if (nsol > 0) {
#ifdef STANDALONE_SOLVER
if (solver_show_working)
if (nsol > 0) {
#ifdef STANDALONE_SOLVER
if (solver_show_working)
- printf("game_assemble: puzzle as generated is too easy.");
+ printf("game_assemble: puzzle as generated is too easy.
\n
");
#endif
if (ntries < MAXTRIES) {
ntries++;
#endif
if (ntries < MAXTRIES) {
ntries++;
@@
-1038,7
+1042,7
@@
generate:
}
#ifdef STANDALONE_SOLVER
if (solver_show_working)
}
#ifdef STANDALONE_SOLVER
if (solver_show_working)
- printf("Unable to generate %s %dx%d after %d attempts.",
+ printf("Unable to generate %s %dx%d after %d attempts.
\n
",
unequal_diffnames[params->diff],
params->order, params->order, MAXTRIES);
#endif
unequal_diffnames[params->diff],
params->order, params->order, MAXTRIES);
#endif
@@
-1047,7
+1051,7
@@
generate:
}
#ifdef STANDALONE_SOLVER
if (solver_show_working)
}
#ifdef STANDALONE_SOLVER
if (solver_show_working)
- printf("new_game_desc: generated %s puzzle; %d attempts (%d solver).",
+ printf("new_game_desc: generated %s puzzle; %d attempts (%d solver).
\n
",
unequal_diffnames[params->diff], ntries, gg_solved);
#endif
unequal_diffnames[params->diff], ntries, gg_solved);
#endif
@@
-1262,7
+1266,8
@@
static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
button &= ~MOD_MASK;
button &= ~MOD_MASK;
- if (x >= 0 && x < ds->order && y >= 0 && y < ds->order) {
+ if (x >= 0 && x < ds->order && ((ox - COORD(x)) <= TILE_SIZE) &&
+ y >= 0 && y < ds->order && ((oy - COORD(y)) <= TILE_SIZE)) {
if (button == LEFT_BUTTON) {
/* normal highlighting for non-immutable squares */
if (GRID(state, flags, x, y) & F_IMMUTABLE)
if (button == LEFT_BUTTON) {
/* normal highlighting for non-immutable squares */
if (GRID(state, flags, x, y) & F_IMMUTABLE)
@@
-1319,7
+1324,7
@@
static char *interpret_move(game_state *state, game_ui *ui, game_drawstate *ds,
static game_state *execute_move(game_state *state, char *move)
{
game_state *ret = NULL;
static game_state *execute_move(game_state *state, char *move)
{
game_state *ret = NULL;
- int x, y, n, i;
+ int x, y, n, i
, rc
;
debug(("execute_move: %s", move));
debug(("execute_move: %s", move));
@@
-1355,7
+1360,8
@@
static game_state *execute_move(game_state *state, char *move)
p++;
}
if (*p) goto badmove;
p++;
}
if (*p) goto badmove;
- assert(check_complete(ret->nums, ret, 1) > 0);
+ rc = check_complete(ret->nums, ret, 1);
+ assert(rc > 0);
return ret;
} else if (move[0] == 'H') {
return solver_hint(state, NULL, DIFF_EASY, DIFF_EASY);
return ret;
} else if (move[0] == 'H') {
return solver_hint(state, NULL, DIFF_EASY, DIFF_EASY);
@@
-1748,7
+1754,7
@@
const struct game thegame = {
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,
-
0,
/* flags */
+
REQUIRE_RBUTTON | REQUIRE_NUMPAD,
/* flags */
};
/* ----------------------------------------------------------------------
};
/* ----------------------------------------------------------------------