X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/28b5987d5dbdcb396c07b937a638590e5361361e..c5aa0b02c19bfd6e717837c0ae0b912456e47622:/mines.c diff --git a/mines.c b/mines.c index 7597d07..f3e216c 100644 --- a/mines.c +++ b/mines.c @@ -237,7 +237,7 @@ static game_params *custom_params(config_item *cfg) return ret; } -static char *validate_params(game_params *params) +static char *validate_params(game_params *params, int full) { /* * Lower limit on grid size: each dimension must be at least 3. @@ -253,7 +253,7 @@ static char *validate_params(game_params *params) * _have_ to have a gap somewhere which you can't determine the * position of. */ - if (params->w <= 2 || params->h <= 2) + if (full && params->unique && (params->w <= 2 || params->h <= 2)) return "Width and height must both be greater than two"; if (params->n > params->w * params->h - 9) return "Too many mines for grid size"; @@ -2604,27 +2604,23 @@ static game_state *execute_move(game_state *from, char *move) * Drawing routines. */ -static void game_size(game_params *params, game_drawstate *ds, - int *x, int *y, int expand) +static void game_compute_size(game_params *params, int tilesize, + int *x, int *y) { - double tsx, tsy, ts; - /* - * Each window dimension equals the tile size times 3 more than - * the grid dimension (the border is 3/2 the width of the - * tiles). - */ - tsx = (double)*x / ((double)params->w + 3.0); - tsy = (double)*y / ((double)params->h + 3.0); - ts = min(tsx, tsy); - if (expand) - ds->tilesize = (int)(ts + 0.5); - else - ds->tilesize = min((int)ts, PREFERRED_TILE_SIZE); + /* Ick: fake up `ds->tilesize' for macro expansion purposes */ + struct { int tilesize; } ads, *ds = &ads; + ads.tilesize = tilesize; *x = BORDER * 2 + TILE_SIZE * params->w; *y = BORDER * 2 + TILE_SIZE * params->h; } +static void game_set_size(game_drawstate *ds, game_params *params, + int tilesize) +{ + ds->tilesize = tilesize; +} + static float *game_colours(frontend *fe, game_state *state, int *ncolours) { float *ret = snewn(3 * NCOLOURS, float); @@ -3048,7 +3044,7 @@ const struct game thegame = { game_changed_state, interpret_move, execute_move, - game_size, + PREFERRED_TILE_SIZE, game_compute_size, game_set_size, game_colours, game_new_drawstate, game_free_drawstate, @@ -3074,7 +3070,7 @@ const struct game thegame = { * $ ./mineobfusc 9x9:4,4,004000007c00010022080 * 9x9:4,4,mb071b49fbd1cb6a0d5868 * - * gcc -DSTANDALONE_OBFUSCATOR -o mineobfusc mines.c malloc.c random.c tree234.c + * gcc -DSTANDALONE_OBFUSCATOR -o mineobfusc mines.c malloc.c random.c tree234.c misc.c */ #include @@ -3091,7 +3087,7 @@ void unclip(frontend *fe) {} void start_draw(frontend *fe) {} void draw_update(frontend *fe, int x, int y, int w, int h) {} void end_draw(frontend *fe) {} -void midend_supersede_game_desc(midend_data *me, char *desc) {} +void midend_supersede_game_desc(midend_data *me, char *desc, char *privdesc) {} void status_bar(frontend *fe, char *text) {} void fatal(char *fmt, ...) @@ -3112,15 +3108,13 @@ int main(int argc, char **argv) { game_params *p; game_state *s; - int recurse = TRUE; char *id = NULL, *desc, *err; int y, x; - int grade = FALSE; while (--argc > 0) { char *p = *++argv; if (*p == '-') { - fprintf(stderr, "%s: unrecognised option `%s'\n", argv[0]); + fprintf(stderr, "%s: unrecognised option `%s'\n", argv[0], p); return 1; } else { id = p;