diff options
| author | Jonas Kölker <jonaskoelker@yahoo.com> | 2015-09-21 16:53:20 +0200 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2015-10-03 16:58:18 +0100 |
| commit | 7543082f26045413df059866cb2e4bf8fc891143 (patch) | |
| tree | fb0ee7798186f76b4dc22502cebe70c16ddd9f78 | |
| parent | 02434a6ed1373e352f5449f0627594aeed67a231 (diff) | |
| download | puzzles-7543082f26045413df059866cb2e4bf8fc891143.zip puzzles-7543082f26045413df059866cb2e4bf8fc891143.tar.gz puzzles-7543082f26045413df059866cb2e4bf8fc891143.tar.bz2 puzzles-7543082f26045413df059866cb2e4bf8fc891143.tar.xz | |
Add game_text_format to Pearl.
| -rw-r--r-- | pearl.c | 32 |
1 files changed, 29 insertions, 3 deletions
@@ -1722,12 +1722,38 @@ done: static int game_can_format_as_text_now(const game_params *params) { - return FALSE; + return TRUE; } static char *game_text_format(const game_state *state) { - return NULL; + int w = state->shared->w, h = state->shared->h, cw = 4, ch = 2; + int gw = cw*(w-1) + 2, gh = ch*(h-1) + 1, len = gw * gh, r, c, j; + char *board = snewn(len + 1, char); + + assert(board); + memset(board, ' ', len); + + for (r = 0; r < h; ++r) { + for (c = 0; c < w; ++c) { + int i = r*w + c, cell = r*ch*gw + c*cw; + board[cell] = state->shared->clues[i]["+BW"]; + if (c < w - 1 && (state->lines[i] & R || state->lines[i+1] & L)) + memset(board + cell + 1, '-', cw - 1); + if (r < h - 1 && (state->lines[i] & D || state->lines[i+w] & U)) + for (j = 1; j < ch; ++j) board[cell + j*gw] = '|'; + if (c < w - 1 && (state->marks[i] & R || state->marks[i+1] & L)) + board[cell + cw/2] = 'x'; + if (r < h - 1 && (state->marks[i] & D || state->marks[i+w] & U)) + board[cell + (ch/2 * gw)] = 'x'; + } + + for (j = 0; j < (r == h - 1 ? 1 : ch); ++j) + board[r*ch*gw + (gw - 1) + j*gw] = '\n'; + } + + board[len] = '\0'; + return board; } struct game_ui { @@ -2537,7 +2563,7 @@ const struct game thegame = { dup_game, free_game, TRUE, solve_game, - FALSE, game_can_format_as_text_now, game_text_format, + TRUE, game_can_format_as_text_now, game_text_format, new_ui, free_ui, encode_ui, |