X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/19ef4855cd8681b43024a9df144c22aae91abc4f..af52394ee99f751e8a23169d70e9d742efc6e949:/sixteen.c diff --git a/sixteen.c b/sixteen.c index 828168e..4611e3c 100644 --- a/sixteen.c +++ b/sixteen.c @@ -379,6 +379,45 @@ static void free_game(game_state *state) sfree(state); } +static char *game_text_format(game_state *state) +{ + char *ret, *p, buf[80]; + int x, y, col, maxlen; + + /* + * First work out how many characters we need to display each + * number. + */ + col = sprintf(buf, "%d", state->n); + + /* + * Now we know the exact total size of the grid we're going to + * produce: it's got h rows, each containing w lots of col, w-1 + * spaces and a trailing newline. + */ + maxlen = state->h * state->w * (col+1); + + ret = snewn(maxlen, char); + p = ret; + + for (y = 0; y < state->h; y++) { + for (x = 0; x < state->w; x++) { + int v = state->tiles[state->w*y+x]; + sprintf(buf, "%*d", col, v); + memcpy(p, buf, col); + p += col; + if (x+1 == state->w) + *p++ = '\n'; + else + *p++ = ' '; + } + } + + assert(p - ret == maxlen); + *p = '\0'; + return ret; +} + static game_ui *new_ui(game_state *state) { return NULL; @@ -774,21 +813,21 @@ static int game_wants_statusbar(void) #endif const struct game thegame = { - "Sixteen", "games.sixteen", TRUE, + "Sixteen", "games.sixteen", default_params, game_fetch_preset, decode_params, encode_params, free_params, dup_params, - game_configure, - custom_params, + TRUE, game_configure, custom_params, validate_params, new_game_seed, validate_seed, new_game, dup_game, free_game, + TRUE, game_text_format, new_ui, free_ui, make_move,