Introduction
Introduction Statistics Contact Development Disclaimer Help
option to flip the board - chess-puzzles - chess puzzle book generator
git clone git://git.codemadness.org/chess-puzzles
Log
Files
Refs
README
LICENSE
---
commit 3d921c8e0e2011ae994e508e89fc71086fffd598
parent 3c9f4a2be304b3f0d197d69bea715ee0c9e29570
Author: Hiltjo Posthuma <[email protected]>
Date: Wed, 20 Dec 2023 21:54:11 +0100
option to flip the board
Diffstat:
M fen_to_svg.c | 115 +++++++++++++++++++++--------…
1 file changed, 80 insertions(+), 35 deletions(-)
---
diff --git a/fen_to_svg.c b/fen_to_svg.c
@@ -1,4 +1,4 @@
-/* TODO: option to flip board? */
+/* TODO: output for PGN notation for moves */
#include <ctype.h>
#include <stdio.h>
@@ -26,7 +26,8 @@ static const int lightsquare[] = { 0xf0, 0xd9, 0xb5 };
static const int darksquarehi[] = { 0xaa, 0xa2, 0x3a };
static const int lightsquarehi[] = { 0xcd, 0xd2, 0x6a };
-static const int showcoords = 1; /* config: show board coordinates? */
+static int showcoords = 1; /* config: show board coordinates? */
+static int flipboard = 0; /* config: flip board ? */
int
isvalidsquare(int x, int y)
@@ -159,7 +160,7 @@ void
svg_showboard(void)
{
const int *color;
- int x, y, piece;
+ int ix, iy, x, y, piece;
fputs("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www…
@@ -170,8 +171,12 @@ svg_showboard(void)
showboardfen();
fputs(" -->\n", stdout);
- for (y = 0; y < 8; y++) {
- for (x = 0; x < 8; x++) {
+ for (iy = 0; iy < 8; iy++) {
+ y = flipboard ? 7 - iy : iy;
+
+ for (ix = 0; ix < 8; ix++) {
+ x = flipboard ? 7 - ix : ix;
+
if (x % 2 == 0) {
if (y % 2 == 0)
color = highlight[y][x] ? lightsquareh…
@@ -185,11 +190,11 @@ svg_showboard(void)
}
printf("<g><rect x=\"%d\" y=\"%d\" width=\"45\" height…
- x * 45, y * 45, color[0], color[1], color[2]);
+ ix * 45, iy * 45, color[0], color[1], color[2]…
piece = getpiece(x, y);
if (piece) {
- printf("<g transform=\"translate(%d %d)\">", x…
+ printf("<g transform=\"translate(%d %d)\">", i…
svg_showpiece(piece);
fputs("</g>\n", stdout);
}
@@ -197,23 +202,47 @@ svg_showboard(void)
}
if (showcoords) {
- x = 7;
- for (y = 0; y < 8; y++) {
- if (y % 2 == 0)
- color = highlight[y][x] ? lightsquarehi : ligh…
- else
- color = highlight[y][x] ? darksquarehi : darks…
+ ix = 7;
+ x = flipboard ? 0 : 7;
+ for (iy = 0; iy < 8; iy++) {
+ y = flipboard ? 7 - iy : iy;
+
+ /* inverse square color for text */
+ if (x % 2 == 0) {
+ if (y % 2 == 0)
+ color = highlight[y][x] ? darksquarehi…
+ else
+ color = highlight[y][x] ? lightsquareh…
+ } else {
+ if (y % 2 == 0)
+ color = highlight[y][x] ? lightsquareh…
+ else
+ color = highlight[y][x] ? darksquarehi…
+ }
+
printf("<text x=\"%d\" y=\"%d\" fill=\"#%02x%02x%02x\"…
- (x + 1) * 45 - 2, (y * 45) + 10, color[0], col…
+ (ix + 1) * 45 - 2, (iy * 45) + 10, color[0], c…
}
- y = 7;
- for (x = 0; x < 8; x++) {
- if (x % 2 == 0)
- color = highlight[y][x] ? lightsquarehi : ligh…
- else
- color = highlight[y][x] ? darksquarehi : darks…
+ iy = 7;
+ y = flipboard ? 0 : 7;
+ for (ix = 0; ix < 8; ix++) {
+ x = flipboard ? 7 - ix : ix;
+
+ /* inverse square color for text */
+ if (x % 2 == 0) {
+ if (y % 2 == 0)
+ color = highlight[y][x] ? darksquarehi…
+ else
+ color = highlight[y][x] ? lightsquareh…
+ } else {
+ if (y % 2 == 0)
+ color = highlight[y][x] ? lightsquareh…
+ else
+ color = highlight[y][x] ? darksquarehi…
+ }
+
printf("<text x=\"%d\" y=\"%d\" fill=\"#%02x%02x%02x\"…
- (x * 45) + 2, (y + 1) * 45 - 3, color[0], colo…
+ (ix * 45) + 2, (iy + 1) * 45 - 3, color[0], co…
}
}
@@ -255,7 +284,7 @@ void
tty_showboard(void)
{
const int *color;
- int x, y, piece;
+ int ix, iy, x, y, piece;
printf("Board FEN:\n");
showboardfen();
@@ -271,13 +300,17 @@ tty_showboard(void)
SETFGCOLOR(0x00, 0x00, 0x00);
putchar('\n');
- for (y = 0; y < 8; y++) {
+ for (iy = 0; iy < 8; iy++) {
+ y = flipboard ? 7 - iy : iy;
+
color = border;
SETBGCOLOR(color[0], color[1], color[2]);
SETFGCOLOR(0xff, 0xff, 0xff);
fputs(" ", stdout);
- for (x = 0; x < 8; x++) {
+ for (ix = 0; ix < 8; ix++) {
+ x = flipboard ? 7 - ix : ix;
+
if (x % 2 == 0) {
if (y % 2 == 0)
color = highlight[y][x] ? lightsquareh…
@@ -326,10 +359,14 @@ tty_showboard(void)
color = border;
SETBGCOLOR(color[0], color[1], color[2]);
SETFGCOLOR(0xff, 0xff, 0xff);
- if (showcoords)
- fputs(" a b c d e f g h ", stdout);
- else
+ if (showcoords) {
+ if (flipboard)
+ fputs(" h g f e d c b a ", stdout);
+ else
+ fputs(" a b c d e f g h ", stdout);
+ } else {
fputs(" ", stdout);
+ }
printf("\x1b[0m"); /* reset */
printf("\n");
}
@@ -355,15 +392,19 @@ ascii_showboard(void)
int hi[3] = { '>', ' ', '<' };
int dark[3] = { '.', '.', '.' };
int light[3] = { ' ', ' ', ' ' };
- int *color, x, y, piece;
+ int *color, ix, iy, x, y, piece;
printf("Board FEN:\n");
showboardfen();
printf("\n\n");
- for (y = 0; y < 8; y++) {
+ for (iy = 0; iy < 8; iy++) {
+ y = flipboard ? 7 - iy : iy;
+
fputs("+---+---+---+---+---+---+---+---+\n", stdout);
- for (x = 0; x < 8; x++) {
+ for (ix = 0; ix < 8; ix++) {
+ x = flipboard ? 7 - ix : ix;
+
if (x % 2 == 0) {
if (y % 2 == 0)
color = highlight[y][x] ? hi : light;
@@ -375,8 +416,8 @@ ascii_showboard(void)
else
color = highlight[y][x] ? hi : light;
}
-
- if (x == 0)
+
+ if (ix == 0)
putchar('|');
putchar(color[0]);
piece = getpiece(x, y);
@@ -394,8 +435,12 @@ ascii_showboard(void)
putchar('\n');
}
fputs("+---+---+---+---+---+---+---+---+\n", stdout);
- if (showcoords)
- printf(" a | b | c | d | e | f | g | h |\n");
+ if (showcoords) {
+ if (flipboard)
+ printf(" h | g | f | e | d | c | b | a |\n");
+ else
+ printf(" a | b | c | d | e | f | g | h |\n");
+ }
fputs("\n", stdout);
}
@@ -467,7 +512,7 @@ main(int argc, char *argv[])
black_can_castle[1] = 1;
}
break;
- case 3: /* TODO: en-passant square, rest of the fields */
+ case 3: /* en passant square */
if (*s >= 'a' && *s <= 'h' &&
*(s + 1) >= '1' && *(s + 1) >= '6') {
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.