X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=flip.c;h=c7126fb7d964fa240cfef570eae446f9daa4bf8e;hb=db313b3948d27244dd7c34c2609c66d6204d8931;hp=a34b4885ed40c1180fe7fd80a20cf40076a32794;hpb=251b21c41813055d9c416378508b1ee038bc3dac;p=sgt-puzzles.git diff --git a/flip.c b/flip.c index a34b488..c7126fb 100644 --- a/flip.c +++ b/flip.c @@ -859,11 +859,46 @@ static int game_can_format_as_text_now(const game_params *params) return TRUE; } +#define RIGHT 1 +#define DOWN gw + static char *game_text_format(const game_state *state) { - return NULL; + int w = state->w, h = state->h, wh = w*h, r, c, dx, dy; + int cw = 4, ch = 4, gw = w * cw + 2, gh = h * ch + 1, len = gw * gh; + char *board = snewn(len + 1, char); + + memset(board, ' ', len - 1); + + for (r = 0; r < h; ++r) { + for (c = 0; c < w; ++c) { + int cell = r*ch*gw + c*cw, center = cell+(ch/2)*DOWN + cw/2*RIGHT; + char flip = (state->grid[r*w + c] & 1) ? '#' : '.'; + for (dy = -1 + (r == 0); dy <= 1 - (r == h - 1); ++dy) + for (dx = -1 + (c == 0); dx <= 1 - (c == w - 1); ++dx) + if (state->matrix->matrix[(r*w+c)*wh + ((r+dy)*w + c+dx)]) + board[center + dy*DOWN + dx*RIGHT] = flip; + board[cell] = '+'; + for (dx = 1; dx < cw; ++dx) board[cell+dx*RIGHT] = '-'; + for (dy = 1; dy < ch; ++dy) board[cell+dy*DOWN] = '|'; + } + board[r*ch*gw + gw - 2] = '+'; + board[r*ch*gw + gw - 1] = '\n'; + for (dy = 1; dy < ch; ++dy) { + board[r*ch*gw + gw - 2 + dy*DOWN] = '|'; + board[r*ch*gw + gw - 1 + dy*DOWN] = '\n'; + } + } + memset(board + len - gw, '-', gw - 2); + for (c = 0; c <= w; ++c) board[len - gw + cw*c] = '+'; + board[len - 1] = '\n'; + board[len] = '\0'; + return board; } +#undef RIGHT +#undef DOWN + struct game_ui { int cx, cy, cdraw; }; @@ -1278,7 +1313,7 @@ static void game_print(drawing *dr, const game_state *state, int tilesize) const struct game thegame = { "Flip", "games.flip", "flip", default_params, - game_fetch_preset, + game_fetch_preset, NULL, decode_params, encode_params, free_params, @@ -1291,7 +1326,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,