chess-puzzles

chess puzzle book generator
git clone git://git.codemadness.org/chess-puzzles
Log | Files | Refs | README | LICENSE

commit b157d49005e4d9fd2e5e979b72a1e222e21fdec3
parent 52d9636da4a82de476f21b1c61de8b7570f96c92
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Thu, 29 Feb 2024 19:02:30 +0100

add option to not highlight the last played move or checks or checkmates

This is better for puzzles/training. Sometimes the last played move gives a
hint of a blunder etc.

This adds an extra challenge to analyze more properties of the position.

Diffstat:
Mfen.1 | 8++++++--
Mfen.c | 20+++++++++++++-------
2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/fen.1 b/fen.1 @@ -1,4 +1,4 @@ -.Dd January 14, 2024 +.Dd February 29, 2024 .Dt FEN 1 .Os .Sh NAME @@ -6,7 +6,7 @@ .Nd parses chess FEN, plays moves and writes output .Sh SYNOPSIS .Nm -.Op Fl cCfF +.Op Fl cCfFhH .Op Fl l .Op Fl m mapping .Op Fl o Ar ascii | fen | pgn | speak | svg | tty @@ -34,6 +34,10 @@ Disable board coordinates. Flip the board, default is off. .It Fl F Do not flip the board. +.It Fl h +Highlight the last played move and checks or checkmates. +.It Fl H +Do not highlight the last played move and checks or checkmates. .It Fl l For PGN and speak mode only output the last move. For PGN this will not prefix the move number. diff --git a/fen.c b/fen.c @@ -100,6 +100,7 @@ struct board { int flipboard; /* flip board ? default: 0 */ int showcoords; /* board coordinates? default: 1 */ + int highlights; /* highlight moves and checks? default: 1 */ struct theme *theme; /* board theme */ }; @@ -129,6 +130,7 @@ board_init(struct board *b) b->movenumber = 1; b->flipboard = 0; b->showcoords = 1; + b->highlights = 1; b->theme = &themes[0]; /* use first theme as default */ } @@ -1388,13 +1390,15 @@ board_playmoves(struct board *b, const char *moves) } /* highlight last move */ - highlightmove(b, x, y); - highlightmove(b, x2, y2); - - /* highlight king in check or mate */ - if (isincheck(b, b->side_to_move) && - findking(b, b->side_to_move, &x, &y)) - highlightcheck(b, x, y); + if (b->highlights) { + highlightmove(b, x, y); + highlightmove(b, x2, y2); + + /* highlight king in check or mate */ + if (isincheck(b, b->side_to_move) && + findking(b, b->side_to_move, &x, &y)) + highlightcheck(b, x, y); + } } void @@ -1600,6 +1604,8 @@ main(int argc, char *argv[]) case 'd': dutchmode = 1; break; /* top secret dutch mode for "speak" */ case 'f': board.flipboard = 1; break; case 'F': board.flipboard = 0; break; + case 'h': board.highlights = 1; break; + case 'H': board.highlights = 0; break; case 'l': onlylastmove = 1; silent = 1; break; case 'm': /* remap PGN */ if (i + 1 >= argc)